{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 机器学习练习 1 - 线性回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个是另一位大牛写的，作业内容在根目录： [作业文件](ex1.pdf)\n",
    "\n",
    "代码修改并注释：黄海广，haiguang2000@qq.com"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 单变量线性回归"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:19.663513Z",
     "start_time": "2024-08-05T08:13:19.660168Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ],
   "outputs": [],
   "execution_count": 69
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:19.694147Z",
     "start_time": "2024-08-05T08:13:19.685563Z"
    }
   },
   "source": [
    "path =  'ex1data1.txt'\n",
    "data = pd.read_csv(path, header=None, names=['Population', 'Profit'])\n",
    "data.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Population   Profit\n",
       "0      6.1101  17.5920\n",
       "1      5.5277   9.1302\n",
       "2      8.5186  13.6620\n",
       "3      7.0032  11.8540\n",
       "4      5.8598   6.8233"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Population</th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6.1101</td>\n",
       "      <td>17.5920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5.5277</td>\n",
       "      <td>9.1302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8.5186</td>\n",
       "      <td>13.6620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.0032</td>\n",
       "      <td>11.8540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.8598</td>\n",
       "      <td>6.8233</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 70
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:19.737543Z",
     "start_time": "2024-08-05T08:13:19.729508Z"
    }
   },
   "source": [
    "data.describe()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "       Population     Profit\n",
       "count   97.000000  97.000000\n",
       "mean     8.159800   5.839135\n",
       "std      3.869884   5.510262\n",
       "min      5.026900  -2.680700\n",
       "25%      5.707700   1.986900\n",
       "50%      6.589400   4.562300\n",
       "75%      8.578100   7.046700\n",
       "max     22.203000  24.147000"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Population</th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>97.000000</td>\n",
       "      <td>97.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>8.159800</td>\n",
       "      <td>5.839135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.869884</td>\n",
       "      <td>5.510262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>5.026900</td>\n",
       "      <td>-2.680700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>5.707700</td>\n",
       "      <td>1.986900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>6.589400</td>\n",
       "      <td>4.562300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>8.578100</td>\n",
       "      <td>7.046700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>22.203000</td>\n",
       "      <td>24.147000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 71
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "看下数据长什么样子"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:19.955185Z",
     "start_time": "2024-08-05T08:13:19.865994Z"
    }
   },
   "source": [
    "data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ],
      "image/png": "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oO/b/mNDPW6sjyG/vPTSS3HHHXfEO97xjpg5c+aQ57385S+Pe++9N773ve9Fc3NznHLKKbFs2bJobW2dwmoZq2uuuSb+5//8n/HjH/84vvSlL8WmTZviqquuigMHDgz5GO/rwnfffffFjBkz4vrrrx/2PO/r/JckSdx2221x+eWXx/nnnx8RfmcXq8Gu9fHy/Xf2tEl9duKaa64Z+PcFF1wQl156aZx99tlx3333xW233TboY47vWU2SZNB28tc999wT11xzTSxYsGDIc84999w499xzBz6/9NJL4/nnn48vfvGL0dDQMBVlkkODvW9Hes+O5zHkh0OHDsUNN9wQR48eja9//evDnnvJJZdkLRC2bNmyeNWrXhVNTU3x1a9+dbJLZZze/va3D/z7/PPPj9e85jWxaNGieOihh4YNbN7Xhe1v//Zv453vfOeI80e9r/PfBz7wgfj5z38eP/3pT0845nd2cRnuWkcUxu9sPeVTbPr06XHBBRcMebdl3rx5J9x127VrV0ybNi1mz549FSUyQTt27IhHH3003vOe94z5sZdccom77AWmfzeFwd63x99VP/5xY30M+eHQoUPxtre9Ldrb2+ORRx4Z9o77YE466aS46KKLvNcLzPz582PRokXDXjfv68L2k5/8JLZu3Tqu39/e1/ll1apV8b3vfS/WrVsXZ5xxxkC739nFZ6hr3a9QfmcL5VPswIED8dxzz8X8+fMHPX7ppZcOrNrd74c//GG85jWvifLy8qkokQlas2ZNzJkzJ/7wD/9wzI/dvHnzkD8b5Kfa2tqYN29e1vv24MGDsWHDhrjsssuGfNxQ7/XhHkP6+n+5t7a2xqOPPjqum6VJksSWLVu81wvM7t274/nnnx/2unlfF7Z77rknXv3qV8eFF1445sd6X+eHJEniAx/4QDzwwAPx4x//OGpra7OO+51dPEa61hEF9jt7ypeWKzF/+qd/mqxfvz5pa2tLHn/88eSNb3xjMmPGjGT79u1JkiTJHXfckdx4440D57e1tSWVlZXJhz/84eRf/uVfknvuuScpLy9P/vf//t9pfQmMwZEjR5Izzzwz+djHPnbCseOv9X//7/89efDBB5Nf/OIXyT//8z8nd9xxRxIRyf333z+VJTMK+/fvTzZv3pxs3rw5iYjky1/+crJ58+aB1Ts/+9nPJlVVVckDDzyQPPPMM0ljY2Myf/78pLu7e+A5brzxxuSOO+4Y+Hzjxo1JWVlZ8tnPfjZ57rnnks9+9rPJtGnTkscff3zKvz5+Z7hrfejQoeTNb35zcsYZZyRbtmxJXnzxxYGPAwcODDzH8df6rrvuSn7wgx8kv/zlL5PNmzcn73rXu5Jp06Yl//iP/5jGl8j/N9y13r9/f/Knf/qnyWOPPZa0t7cn69atSy699NLkP/yH/+B9XYBG+j88SZKkq6srqaysTL7xjW8M+hze14Xh/e9/f1JVVZWsX78+6//ovr6+gXP8zi4OI13rQvudLZRPsre//e3J/Pnzk/Ly8mTBggXJ9ddfnzz77LMDx2+++ebkiiuuyHrM+vXrk/r6+uTkk09OFi9ePOQvCPLPww8/nEREsnXr1hOOHX+tP/e5zyVnn312csoppySnn356cvnllycPPfTQFFbLaPVvX3f8x80335wkyW+3WLnzzjuTefPmJRUVFUlDQ0PyzDPPZD3HFVdcMXB+v//1v/5Xcu655ybl5eXJy1/+cjdk8sBw17q9vX3QYxGRrFu3buA5jr/WH/rQh5IzzzwzOfnkk5OamppkxYoVyWOPPTb1XxxZhrvWfX19yYoVK5KampqkvLw8OfPMM5Obb745+dWvfpX1HN7XhWGk/8OTJEn++q//Ojn11FOTffv2Dfoc3teFYaj/o9esWTNwjt/ZxWGka11ov7Mz//+LAgAAAKaYOeUAAACQEqEcAAAAUiKUAwAAQEqEcgAAAEiJUA4AAAApEcoBAAAgJUI5AAAApEQoBwBOcMstt8R1112XN88DAMVKKAeAPHPLLbdEJpOJTCYT5eXlcdZZZ8Xtt98evb29aZc2pO3bt0cmk4ktW7Zktf+P//E/4t57702lJgAoBNPSLgAAONEb3vCGWLNmTRw6dCh+8pOfxHve857o7e2Nb3zjG2mXNiZVVVVplwAAeU1POQDkoYqKipg3b14sXLgw3vGOd8Q73/nO+O53vxsHDhyI1atXx5w5c+KUU06Jyy+/PDZt2jTwuPXr10cmk4mHHnooLrzwwjjllFPi4osvjmeeeWbgnLvuuit+//d/P+v1vvKVr8TixYuHrOcHP/hBXH755fGyl70sZs+eHW984xvjl7/85cDx2traiIior6+PTCYTV155ZUScOHx9tPX/6Ec/ite85jVRWVkZl112WWzdunUc30UAyH9COQAUgFNPPTUOHToUH/3oR+P++++P++67L55++ulYsmRJvP71r489e/Zknf+Rj3wkvvjFL8amTZtizpw58eY3vzkOHTo07tfv7e2N2267LTZt2hQ/+tGP4qSTToq3vOUtcfTo0YiIeOKJJyIi4tFHH40XX3wxHnjggUGfZ7T1f+ITn4gvfelL8eSTT8a0adPi3e9+97hrB4B8JpQDQJ574okn4tvf/nYsX748vvGNb8QXvvCFuOaaa+K8886Lb33rW3HqqafGPffck/WYO++8M66++uq44IIL4r777otf//rX8eCDD467hre+9a1x/fXXR11dXfz+7/9+3HPPPfHMM8/Ev/zLv0RERE1NTUREzJ49O+bNmxezZs064Tn6h9+Ppv7/9t/+W1xxxRVx3nnnxR133BGPPfZYvPTSS+OuHwDylVAOAHno//yf/xOnnXZanHLKKXHppZdGQ0NDrFq1Kg4dOhTLli0bOK+8vDyWLl0azz33XNbjL7300oF/z5o1K84999wTzhmLX/7yl/GOd7wjzjrrrJg5c+bAcPVf/epXY3qO0db/e7/3ewP/nj9/fkRE7Nq1a9z1A0C+stAbAOSh/l7x8vLyWLBgQZSXl8c//dM/RUREJpPJOjdJkhPaBtN/zkknnRRJkmQdG2lo+5ve9KZYuHBhfOtb34oFCxbE0aNH4/zzz4+DBw+O+mvqf83R1F9eXn5C3f1D5QGgmOgpB4A8NH369FiyZEksWrRoIKAuWbIkTj755PjpT386cN6hQ4fiySefjFe84hVZj3/88ccH/r137974xS9+ES9/+csj4rdDzXfu3JkVzI/fyuxYu3fvjueeey7+/M//PF73utfFK17xiti7d2/WOSeffHJERBw5cmTI5xlL/QBQKvSUA0CBmD59erz//e+Pj3zkIzFr1qw488wz4/Of/3z09fXFypUrs879i7/4i5g9e3bMnTs3PvGJT0R1dfXAKuhXXnlldHR0xOc///n4T//pP8UPfvCD+L//9//GzJkzB33d008/PWbPnh3f/OY3Y/78+fGrX/0q7rjjjqxz5syZE6eeemr84Ac/iDPOOCNOOeWUE7ZDG0v9AFAq9JQDQAH57Gc/G29961vjxhtvjFe96lWxbdu2ePjhh+P0008/4bwPfvCD8epXvzpefPHF+N73vjfQm/2KV7wivv71r8df/uVfxoUXXhhPPPFE3H777UO+5kknnRTf+c534qmnnorzzz8/PvzhD8cXvvCFrHOmTZsWX/3qV+Ov//qvY8GCBXHttddOqH4AKBWZ5PhJZQBAwVq/fn0sX7489u7dGy972cvSLgcAGIGecgAAAEiJUA4AAAApMXwdAAAAUqKnHAAAAFIilAMAAEBKhHIAAABIiVAOAAAAKRHKAQAAICVCOQAAAKREKAcAAICUCOUAAACQEqEcAAAAUvL/AJ4rmXUNE3ecAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 72
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在让我们使用梯度下降来实现线性回归，以最小化成本函数。 以下代码示例中实现的方程在“练习”文件夹中的“ex1.pdf”中有详细说明。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先，我们将创建一个以参数θ为特征函数的代价函数\n",
    "$$J\\left( \\theta  \\right)=\\frac{1}{2m}\\sum\\limits_{i=1}^{m}{{{\\left( {{h}_{\\theta }}\\left( {{x}^{(i)}} \\right)-{{y}^{(i)}} \\right)}^{2}}}$$\n",
    "其中：\\\\[{{h}_{\\theta }}\\left( x \\right)={{\\theta }^{T}}X={{\\theta }_{0}}{{x}_{0}}+{{\\theta }_{1}}{{x}_{1}}+{{\\theta }_{2}}{{x}_{2}}+...+{{\\theta }_{n}}{{x}_{n}}\\\\] "
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.029351Z",
     "start_time": "2024-08-05T08:13:20.025795Z"
    }
   },
   "source": [
    "def computeCost(X, y, theta):\n",
    "    inner = np.power(((X * theta.T) - y), 2)\n",
    "    return np.sum(inner) / (2 * len(X))"
   ],
   "outputs": [],
   "execution_count": 73
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "让我们在训练集中添加一列，以便我们可以使用向量化的解决方案来计算代价和梯度。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.075706Z",
     "start_time": "2024-08-05T08:13:20.072022Z"
    }
   },
   "source": [
    "data.insert(0, 'Ones', 1)"
   ],
   "outputs": [],
   "execution_count": 74
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在我们来做一些变量初始化。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.108571Z",
     "start_time": "2024-08-05T08:13:20.104398Z"
    }
   },
   "source": [
    "# set X (training data) and y (target variable)\n",
    "cols = data.shape[1]\n",
    "X = data.iloc[:,0:cols-1]#X是所有行，去掉最后一列\n",
    "y = data.iloc[:,cols-1:cols]#X是所有行，最后一列"
   ],
   "outputs": [],
   "execution_count": 75
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "观察下 X (训练集) and y (目标变量)是否正确."
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "scrolled": true,
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.131336Z",
     "start_time": "2024-08-05T08:13:20.125712Z"
    }
   },
   "source": [
    "X.head()#head()是观察前5行"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Ones  Population\n",
       "0     1      6.1101\n",
       "1     1      5.5277\n",
       "2     1      8.5186\n",
       "3     1      7.0032\n",
       "4     1      5.8598"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Ones</th>\n",
       "      <th>Population</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>6.1101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>5.5277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>8.5186</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>7.0032</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>5.8598</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 76
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.173226Z",
     "start_time": "2024-08-05T08:13:20.168124Z"
    }
   },
   "source": [
    "y.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "    Profit\n",
       "0  17.5920\n",
       "1   9.1302\n",
       "2  13.6620\n",
       "3  11.8540\n",
       "4   6.8233"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>17.5920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>9.1302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13.6620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>11.8540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6.8233</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 77
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "代价函数是应该是numpy矩阵，所以我们需要转换X和Y，然后才能使用它们。 我们还需要初始化theta。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.284170Z",
     "start_time": "2024-08-05T08:13:20.280750Z"
    }
   },
   "source": [
    "X = np.matrix(X.values)\n",
    "y = np.matrix(y.values)\n",
    "theta = np.matrix(np.array([0,0]))"
   ],
   "outputs": [],
   "execution_count": 78
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "theta 是一个(1,2)矩阵"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.343112Z",
     "start_time": "2024-08-05T08:13:20.339762Z"
    }
   },
   "source": "theta.T",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0],\n",
       "        [0]])"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 79
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "看下维度"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.461450Z",
     "start_time": "2024-08-05T08:13:20.456993Z"
    }
   },
   "source": [
    "X.shape, theta.shape, y.shape"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((97, 2), (1, 2), (97, 1))"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 80
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算代价函数 (theta初始值为0)."
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.515539Z",
     "start_time": "2024-08-05T08:13:20.511367Z"
    }
   },
   "source": "computeCost(X, y, theta)",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "32.072733877455676"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 81
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# batch gradient decent（批量梯度下降）\n",
    "$${{\\theta }_{j}}:={{\\theta }_{j}}-\\alpha \\frac{\\partial }{\\partial {{\\theta }_{j}}}J\\left( \\theta  \\right)$$"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.559509Z",
     "start_time": "2024-08-05T08:13:20.556045Z"
    }
   },
   "source": [
    "def gradientDescent(X, y, theta, alpha, iters):\n",
    "    temp = np.matrix(np.zeros(theta.shape))\n",
    "    parameters = int(theta.ravel().shape[1])\n",
    "    cost = np.zeros(iters)\n",
    "    \n",
    "    for i in range(iters):\n",
    "        error = (X * theta.T) - y\n",
    "        \n",
    "        for j in range(parameters):\n",
    "            term = np.multiply(error, X[:,j])\n",
    "            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))\n",
    "            \n",
    "        theta = temp\n",
    "        cost[i] = computeCost(X, y, theta)\n",
    "        \n",
    "    return theta, cost"
   ],
   "outputs": [],
   "execution_count": 82
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "初始化一些附加变量 - 学习速率α和要执行的迭代次数。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.598931Z",
     "start_time": "2024-08-05T08:13:20.595856Z"
    }
   },
   "source": [
    "alpha = 0.01\n",
    "iters = 1000"
   ],
   "outputs": [],
   "execution_count": 83
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在让我们运行梯度下降算法来将我们的参数θ适合于训练集。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.666504Z",
     "start_time": "2024-08-05T08:13:20.622354Z"
    }
   },
   "source": [
    "g, cost = gradientDescent(X, y, theta, alpha, iters)\n",
    "g"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[-3.24140214,  1.1272942 ]])"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 84
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最后，我们可以使用我们拟合的参数计算训练模型的代价函数（误差）。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.697721Z",
     "start_time": "2024-08-05T08:13:20.693693Z"
    }
   },
   "source": [
    "computeCost(X, y, g)"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.515955503078914"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 85
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在我们来绘制线性模型以及数据，直观地看出它的拟合。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.829054Z",
     "start_time": "2024-08-05T08:13:20.713661Z"
    }
   },
   "source": [
    "x = np.linspace(data.Population.min(), data.Population.max(), 100)\n",
    "f = g[0, 0] + (g[0, 1] * x)\n",
    "print(g[0,1])\n",
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.plot(x, f, 'r', label='Prediction')\n",
    "ax.scatter(data.Population, data.Profit, label='Traning Data')\n",
    "ax.legend(loc=2)\n",
    "ax.set_xlabel('Population')\n",
    "ax.set_ylabel('Profit')\n",
    "ax.set_title('Predicted Profit vs. Population Size')\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.1272942024281842\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+UAAAK7CAYAAACUMC65AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACiJklEQVR4nOzdeVyVZd7H8c8BEdQQ00Qw16xMs83Ksk2tLK3MsqbV0vZsX8xSnxlzJteyskXbrcb2Mmdsytax1bJymsmspkxtwyxNNBNUuJ8/7gFFQQGB+wCf9+vF64mL+5zz45wzPnzPdV2/KxYEQYAkSZIkSapyCVEXIEmSJElSbWUolyRJkiQpIoZySZIkSZIiYiiXJEmSJCkihnJJkiRJkiJiKJckSZIkKSKGckmSJEmSImIolyRJkiQpIoZySZIkSZIiYiiXpBru4YcfJhaLFX7VqVOHFi1acM455/DDDz9USQ1t2rRh4MCBhd/PmjWLWCzGrFmzynQ/7733HjfeeCMrVqyo0PoABg4cSJs2bbZ6Xffu3Ys8n/Xq1WOvvfbi9ttvJz8/v0Jrev3119lvv/1o0KABsViM6dOnF76eixYtKrzu8ccf5/bbb6/Qx65oAwcOLPK8JScn0759e0aMGEFOTk7U5QGbv0/LYvTo0UyfPn2z8fK+1ytCEAQ8+eSTHHrooaSnp5OSkkKLFi04+uijeeCBB4pcG4vFuPHGG6u8RkmSoVySao0pU6Ywe/ZsXn31VS644AKeeOIJDj30UFavXl3ltXTu3JnZs2fTuXPnMt3uvffeY+TIkZUSystip512Yvbs2cyePZunnnqKHXfckauvvpqhQ4dW2GMEQcApp5xCUlISf//735k9ezbdunXj2GOPZfbs2WRmZhZeWx1COUC9evUKn7fp06dzwAEH8Oc//5kBAwZEXdo2KymUl/e9XhGGDh3K6aefTocOHXjggQd46aWXuOmmm2jWrBl/+9vfilw7e/Zszj///CqvUZIEdaIuQJJUNTp16sR+++0HQI8ePcjLy+Mvf/kL06dP58wzzyz2Nr///jv169ev8FoaNmzIgQceWOH3W1Xq1atXpP7evXuz2267cdddd3HTTTeRlJS02W2CICAnJ4d69eqV6jF+/PFHli9fzoknnsgRRxxR5GdNmzbdtl8gIgkJCZs9b4sWLeLpp5/m1ltvZccdd4ywusoR1Xt9zZo13H777Zx99tncd999RX42cODAzVZ1VOf/PUpSdedMuSTVUgV/hC9evBgI/1Dfbrvt+PTTTznqqKNITU0tDINr167lpptuYrfddiM5OZmmTZtyzjnn8PPPPxe5z3Xr1jFkyBAyMjKoX78+hxxyCHPmzNnssUta0vvBBx/Qp08fmjRpQkpKCu3ateOqq64C4MYbb+S6664DoG3btoXLoDe+j6eeeoquXbvSoEEDtttuO44++mj+9a9/bfb4Dz/8MO3btyc5OZkOHTrw6KOPlus5LJCUlMS+++7L77//XvicxGIxLrvsMu655x46dOhAcnIyjzzyCADvvPMORxxxBKmpqdSvX5+DDjqIf/zjH4X3d+ONN9KiRQsArr/+emKxWOHS+k2Xr3fv3p1//OMfLF68uMjy8JKccMIJtG7dutil9gcccECRGd1nnnmGAw44gLS0NOrXr89OO+3Eueeeu03P1aY2fR9+++239O/fn/T09MLXZ8KECUXqXbRoEbFYjPHjxzNq1ChatWpFSkoK++23H6+//nqR+y9pW8KNN964xecJICcnh2uvvZa9996btLQ0GjduTNeuXTebZY7FYqxevZpHHnmk8Pnv3r07UPJ7/e9//ztdu3alfv36pKam0rNnT2bPnl1sjZ999hmnn346aWlpNGvWjHPPPZfs7Owt1r569Wpyc3OLrKjYWEJC0T8BN12+3qZNmyLvp42/Nv5dvvrqK84444wir9fdd9+9xdokSUU5Uy5JtdTXX38NFJ11Xbt2LccffzwXXXQRN9xwA+vXryc/P5++ffvy9ttvM2TIEA466CAWL17MiBEj6N69Ox999FHh7O8FF1zAo48+yuDBg+nZsyfz5s2jX79+rFq1aqv1vPzyy/Tp04cOHTpw66230qpVKxYtWsQrr7wCwPnnn8/y5cu58847mTZtWmHY6NixIxAuH/6///s/zjnnHP7v//6PtWvXcvPNN3PooYcyZ86cwusefvhhzjnnHPr27cuECRPIzs7mxhtvJDc3d7OgUhYLFiygTp06bL/99oVj06dP5+233+ZPf/oTGRkZpKen8+abb9KzZ0/23HNPHnzwQZKTk5k0aRJ9+vThiSee4NRTT+X8889nr732ol+/flx++eWcccYZJCcnF/u4kyZN4sILL2TBggU8//zzW63z3HPPpW/fvrzxxhsceeSRheNffPEFc+bM4Y477gDC5cynnnoqp556KjfeeCMpKSksXryYN954o9zPUXE2fh/+/PPPHHTQQaxdu5a//OUvtGnThhdeeIHBgwezYMECJk2aVOS2d911F61bty7czz9+/Hh69+7Nm2++SdeuXbe5ttzcXJYvX87gwYPZcccdWbt2La+99hr9+vVjypQpnH322UD4XB1++OH06NGDP/7xj0A4Q16Sxx9/nDPPPJOjjjqKJ554gtzcXMaPH0/37t15/fXXOeSQQ4pcf9JJJ3Hqqady3nnn8emnnxZuk3jooYdKfIwddtiBnXfemUmTJpGens4xxxxD+/btt/pBRIHnn3+e3Nzcwu/z8/O5+OKL+eabb2jVqhUA8+fP56CDDqJVq1ZMmDCBjIwMXn75Za644gp++eUXRowYUarHkqRaL5Ak1WhTpkwJgOD9998P1q1bF6xatSp44YUXgqZNmwapqanBkiVLgiAIggEDBgRA8NBDDxW5/RNPPBEAwXPPPVdk/MMPPwyAYNKkSUEQBMHnn38eAMHVV19d5LrHHnssAIIBAwYUjv3zn/8MgOCf//xn4Vi7du2Cdu3aBWvWrCnxd7n55psDIFi4cGGR8W+//TaoU6dOcPnllxcZX7VqVZCRkRGccsopQRAEQV5eXtC8efOgc+fOQX5+fuF1ixYtCpKSkoLWrVuX+NgFunXrFuy+++7BunXrgnXr1gU//vhjcMMNNwRA8Ic//KHwOiBIS0sLli9fXuT2Bx54YJCenh6sWrWqcGz9+vVBp06dghYtWhTWtXDhwgAIbr755iK3L3g9N34Ojj322FLVHgRBsG7duqBZs2bBGWecUWR8yJAhQd26dYNffvklCIIguOWWWwIgWLFiRanud2sGDBgQNGjQoPB5+/nnn4OJEycGsVgs2H///YMgCAqfxw8++KDIbQcNGhTEYrHgyy+/DIJgw3PTvHnzIu+XlStXBo0bNw6OPPLIIo9b3HMzYsSIYNM/g1q3bl3kfbqp9evXB+vWrQvOO++8YJ999inyswYNGhR7203f6wXvwT322CPIy8srvG7VqlVBenp6cNBBB21W4/jx44vc5yWXXBKkpKQUeQ8XZ86cOUGrVq0CIACC1NTU4LjjjgseffTRzW4LBCNGjCjxvi677LKgTp06wYsvvlg4dvTRRwctWrQIsrOzN7s2JSVls/e+JKl4Ll+XpFriwAMPJCkpidTUVI477jgyMjJ46aWXaNasWZHrTjrppCLfv/DCCzRq1Ig+ffqwfv36wq+9996bjIyMwqWs//znPwE2259+yimnUKfOlhdm/fe//2XBggWcd955pKSklPl3e/nll1m/fj1nn312kRpTUlLo1q1bYY1ffvklP/74I2eccUaRGcPWrVtz0EEHlfrxPvvsM5KSkkhKSqJ58+ZMmDCBM888k/vvv7/IdYcffniRmfPVq1fzwQcfcPLJJ7PddtsVjicmJnLWWWfx/fff8+WXX5b59y+LOnXq0L9/f6ZNm1a4BDovL4+//vWv9O3blyZNmgCw//77A+Hr9/TTT1dIp/7Vq1cXPm9Nmzblqquuonfv3oUz/G+88QYdO3akS5cuRW43cOBAgiDYbJa+X79+Rd4vqamp9OnTh7feeou8vLxtrhfCJfwHH3ww2223HXXq1CEpKYkHH3yQzz//vFz3V/AePOuss4qszNhuu+046aSTeP/99/n999+L3Ob4448v8v2ee+5JTk4OS5cu3eJj7b///nz99dfMnDmTYcOG0bVrV15//XXOPvtsjj/+eIIgKFXNY8eO5a677uKee+6hd+/eQLi0//XXX+fEE0+kfv36Rf53d8wxx5CTk8P7779fqvuXpNrO5euSVEs8+uijdOjQgTp16tCsWbNi95rWr19/s2W3P/30EytWrKBu3brF3u8vv/wCwLJlywDIyMgo8vM6deoUBr2SFOzDLthHXVY//fQTsCFIbqog/JRUY8HYxseMbUm7du148sknicVipKSk0LZt22Ib4m36HP/6668EQVDsc9+8efMiNVamc889lwkTJvDkk09y0UUX8fLLL5OVlcU555xTeM1hhx3G9OnTueOOOzj77LPJzc1l9913Z/jw4Zx++unletx69erx1ltvAZCcnEzr1q2LvN+WLVtW7P7vkp6bkl7HtWvX8ttvv5GWllauOgtMmzaNU045hT/84Q9cd911ZGRkUKdOHSZPnrzFpeNbUvA7lPQeyM/P59dffy3yftr0fz8FWxnWrFmz1cdLSkri6KOP5uijjy58/JNPPpkXXniBl156iWOOOWaLt586dSrDhg3jT3/6E+edd16R32P9+vXceeed3HnnncXetuDfBknSlhnKJamW6NChQ2H39ZIUt990hx12oEmTJsycObPY26SmpgIbgsOSJUuKdNFev379VoNmwb7277//fovXlWSHHXYA4Nlnn6V169YlXrdxjZsqbqwkBU3FtmbT53P77bcnISGBrKysza798ccfgQ2/S2UqmI2eMmUKF110EVOmTKF58+YcddRRRa7r27cvffv2JTc3l/fff58xY8Zwxhln0KZNm3Lt2U5ISNji89akSZMyPTclvY5169YtXImQkpJSZG90gdIExqlTp9K2bVueeuqpIq9lcfdXWgXvwZJ+z4SEhCKrKypakyZNuOqqq5g1axbz5s3bYih/9dVXOffccxk4cCAjR44s8rPtt9++cIXHpZdeWuzt27ZtW6G1S1JN5fJ1SdIWHXfccSxbtoy8vDz222+/zb7at28PUNht+rHHHity+6effpr169dv8TF23XVX2rVrx0MPPbTFwFPSDOHRRx9NnTp1WLBgQbE1FgTB9u3bk5mZyRNPPFFk6e7ixYt57733SveEbIMGDRpwwAEHMG3atCK/Q35+PlOnTqVFixbsuuuuZb7f5OTkUs2abuycc87hgw8+4J133mHGjBkMGDCAxMTEEu+/W7dujBs3DqDYjvYV4YgjjmD+/PnMnTu3yPijjz5KLBajR48eRcanTZtGTk5O4ferVq1ixowZHHrooYW/S5s2bVi6dGnhagoIGxq+/PLLW60nFotRt27dIoF8yZIlm3Vfh9K/Bu3bt2fHHXfk8ccfL/IeXL16Nc8991xhR/ZttW7duhI/DCtYel+wAqE4n3zyCSeddBKHH374ZkeqQbiqpkePHvzrX/9izz33LPZ/c1tbISNJCjlTLknaotNOO43HHnuMY445hiuvvJIuXbqQlJTE999/zz//+U/69u3LiSeeSIcOHejfvz+33347SUlJHHnkkcybN49bbrlli52oC9x999306dOHAw88kKuvvppWrVrx7bff8vLLLxcG/T322AOAiRMnMmDAAJKSkmjfvj1t2rThz3/+M8OHD+ebb76hV69ebL/99vz000/MmTOHBg0aMHLkSBISEvjLX/7C+eefz4knnsgFF1zAihUruPHGG4tdCl0ZxowZQ8+ePenRoweDBw+mbt26TJo0iXnz5vHEE0+Uujv2xvbYYw+mTZvG5MmT2Xfffbc6Iw1w+umnc80113D66aeTm5vLwIEDi/z8T3/6E99//z1HHHEELVq0YMWKFUycOJGkpCS6detWeF2dOnXo1q3bZkeRlcfVV1/No48+yrHHHsuf//xnWrduzT/+8Q8mTZrEoEGDNvvAIjExkZ49e3LNNdeQn5/PuHHjWLlyZZFZ3VNPPZU//elPnHbaaVx33XXk5ORwxx13lGrP+XHHHce0adO45JJLOPnkk/nuu+/4y1/+QmZmJl999VWRa/fYYw9mzZrFjBkzyMzMJDU1tfADq40lJCQwfvx4zjzzTI477jguuugicnNzufnmm1mxYgVjx44t57NXVHZ2Nm3atOEPf/gDRx55JC1btuS3335j1qxZTJw4kQ4dOtCvX79ib7ty5UqOOeYY6tWrx+DBg/noo4+K/Lxjx440bNiQiRMncsghh3DooYcyaNAg2rRpw6pVq/j666+ZMWNGhXfql6QaK9I2c5KkSlfQrfvDDz/c4nUF3bGLs27duuCWW24J9tprryAlJSXYbrvtgt122y246KKLgq+++qrwutzc3ODaa68N0tPTg5SUlODAAw8MZs+evVlX6+K6rwdBEMyePTvo3bt3kJaWFiQnJwft2rXbrJv70KFDg+bNmwcJCQmb3cf06dODHj16BA0bNgySk5OD1q1bByeffHLw2muvFbmPBx54INhll12CunXrBrvuumvw0EMPldile1MF3de3BgguvfTSYn/29ttvB4cffnjQoEGDoF69esGBBx4YzJgxo8g1Zem+vnz58uDkk08OGjVqFMRisc26ipfkjDPOCIDg4IMP3uxnL7zwQtC7d+9gxx13DOrWrRukp6cHxxxzTPD2229v9nt269Ztq4+1pffXxhYvXhycccYZQZMmTYKkpKSgffv2wc0331ykU3nBczNu3Lhg5MiRQYsWLYK6desG++yzT/Dyyy9vdp8vvvhisPfeewf16tULdtppp+Cuu+4qdff1sWPHBm3atAmSk5ODDh06BPfff3+xt/3kk0+Cgw8+OKhfv36R56Sk9/r06dODAw44IEhJSQkaNGgQHHHEEcG7775b5JqCx/n555+LjBf3HthUbm5ucMsttwS9e/cOWrVqFSQnJwcpKSlBhw4dgiFDhgTLli0rcj0bdV8veH5L+tr4d1m4cGFw7rnnBjvuuGOQlJQUNG3aNDjooIOCm266qcTaJElFxYKglK03JUmS4sCiRYto27YtN998M4MHD466HEmStol7yiVJkiRJioihXJIkSZKkiLh8XZIkSZKkiDhTLkmSJElSRAzlkiRJkiRFxFAuSZIkSVJE6kRdQGXLz8/nxx9/JDU1lVgsFnU5kiRJkqQaLggCVq1aRfPmzUlI2PJceI0P5T/++CMtW7aMugxJkiRJUi3z3Xff0aJFiy1eU+NDeWpqKhA+GQ0bNoy4GkmSJElSTbdy5UpatmxZmEe3pMaH8oIl6w0bNjSUS5IkSZKqTGm2UNvoTZIkSZKkiBjKJUmSJEmKiKFckiRJkqSIRLqnfMyYMUybNo0vvviCevXqcdBBBzFu3Djat29feM3AgQN55JFHitzugAMO4P3336+wOoIgYP369eTl5VXYfarmSExMpE6dOh6pJ0mSJKnCRRrK33zzTS699FL2339/1q9fz/DhwznqqKOYP38+DRo0KLyuV69eTJkypfD7unXrVlgNa9euJSsri99//73C7lM1T/369cnMzKzQ954kSZIkRRrKZ86cWeT7KVOmkJ6ezscff8xhhx1WOJ6cnExGRkaFP35+fj4LFy4kMTGR5s2bU7duXWdDVUQQBKxdu5aff/6ZhQsXsssuu5CQ4K4PSZIkSRUjro5Ey87OBqBx48ZFxmfNmkV6ejqNGjWiW7dujBo1ivT09GLvIzc3l9zc3MLvV65cWeLjrV27lvz8fFq2bEn9+vUr4DdQTVSvXj2SkpJYvHgxa9euJSUlJeqSJEmSJNUQcTPlFwQB11xzDYcccgidOnUqHO/duzePPfYYb7zxBhMmTODDDz/k8MMPLxK8NzZmzBjS0tIKv1q2bLnVx3bmU1vje0SSJElSZYgFQRBEXQTApZdeyj/+8Q/eeecdWrRoUeJ1WVlZtG7dmieffJJ+/fpt9vPiZspbtmxJdnY2DRs2LHJtTk4OCxcupG3bts5+aot8r0iSJEkqrZUrV5KWllZsDt1UXCxfv/zyy/n73//OW2+9tcVADpCZmUnr1q356quviv15cnIyycnJlVGmJEmSJEkVKtI1uUEQcNlllzFt2jTeeOMN2rZtu9XbLFu2jO+++47MzMwqqFA33ngje++9d+H3AwcO5IQTTtim+6yI+5AkSZKkmiDSUH7ppZcydepUHn/8cVJTU1myZAlLlixhzZo1APz2228MHjyY2bNns2jRImbNmkWfPn3YYYcdOPHEE6MsPXIDBw4kFosRi8VISkpip512YvDgwaxevbpSH3fixIk8/PDDpbp20aJFxGIxPvnkk3LfhyRJkiTVZJEuX588eTIA3bt3LzI+ZcoUBg4cSGJiIp9++imPPvooK1asIDMzkx49evDUU0+RmpoaQcXxpeD89nXr1vH2229z/vnns3r16sLntcC6detISkqqkMdMS0uLi/uQJEmSpJog8uXrxX0NHDgQCI+ievnll1m6dClr165l8eLFPPzww6XqqL4NRcHq1VX/VY5+ewXnt7ds2ZIzzjiDM888k+nTpxcuOX/ooYfYaaedSE5OJggCsrOzufDCC0lPT6dhw4Ycfvjh/Pvf/y5yn2PHjqVZs2akpqZy3nnnkZOTU+Tnmy49z8/PZ9y4cey8884kJyfTqlUrRo0aBVC4HWGfffYhFosVfviy6X3k5uZyxRVXkJ6eTkpKCocccggffvhh4c9nzZpFLBbj9ddfZ7/99qN+/focdNBBfPnll2V+ziRJkiQpnnjO06Z+/x22267qv37/fZtLr1evHuvWrQPg66+/5umnn+a5554rXD5+7LHHsmTJEl588UU+/vhjOnfuzBFHHMHy5csBePrppxkxYgSjRo3io48+IjMzk0mTJm3xMYcOHcq4ceP44x//yPz583n88cdp1qwZAHPmzAHgtddeIysri2nTphV7H0OGDOG5557jkUceYe7cuey8884cffTRhXUVGD58OBMmTOCjjz6iTp06nHvuueV+riRJkiQpHsRF93Vtuzlz5vD4449zxBFHALB27Vr++te/0rRpUwDeeOMNPv30U5YuXVrYnf6WW25h+vTpPPvss1x44YXcfvvtnHvuuZx//vkA3HTTTbz22mubzZYXWLVqFRMnTuSuu+5iwIABALRr145DDjkEoPCxmzRpQkZGRrH3UbDc/uGHH6Z3794A3H///bz66qs8+OCDXHfddYXXjho1im7dugFwww03cOyxx5KTk+MRZZIkSZKqLUP5purXh99+i+Zxy+iFF15gu+22Y/369axbt46+ffty5513MmnSJFq3bl0YigE+/vhjfvvtN5o0aVLkPtasWcOCBQsA+Pzzz7n44ouL/Lxr167885//LPbxP//8c3Jzcws/CCiPBQsWsG7dOg4++ODCsaSkJLp06cLnn39e5No999yz8L8Luu8vXbqUVq1alfvxJUmSJClKhvJNxWLQoEHUVZRKjx49mDx5MklJSTRv3rxIM7cGm/wO+fn5ZGZmMmvWrM3up1GjRuV6/Hr16pXrdhsL/reXPhaLbTa+6djGv1/Bz/Lz87e5BkmSJEmKinvKq7EGDRqw884707p16612V+/cuTNLliyhTp067LzzzkW+dthhBwA6dOjA+++/X+R2m36/sV122YV69erx+uuvF/vzunXrApCXl1fifey8887UrVuXd955p3Bs3bp1fPTRR3To0GGLv5MkSZIkVXfOlNcSRx55JF27duWEE05g3LhxtG/fnh9//JEXX3yRE044gf32248rr7ySAQMGsN9++3HIIYfw2GOP8dlnn7HTTjsVe58pKSlcf/31DBkyhLp163LwwQfz888/89lnn3HeeeeRnp5OvXr1mDlzJi1atCAlJWWz49AaNGjAoEGDuO6662jcuDGtWrVi/Pjx/P7775x33nlV8dRIkiRJUmQM5bVELBbjxRdfZPjw4Zx77rn8/PPPZGRkcNhhhxV2Sz/11FNZsGAB119/PTk5OZx00kkMGjSIl19+ucT7/eMf/0idOnX405/+xI8//khmZmbhvvQ6depwxx138Oc//5k//elPHHroocUunx87diz5+fmcddZZrFq1iv3224+XX36Z7bffvlKeC0mSJEnVT15+wJyFy1m6Kof01BS6tG1MYkJs6zeMc7EgKMcB2dXIypUrSUtLIzs7m4YNGxb5WU5ODgsXLqRt27Z28NYW+V6RJEmSojNzXhYjZ8wnK3vDyVCZaSmM6NORXp0yI6yseFvKoZtyT7kkSZIkKW7NnJfFoKlziwRygCXZOQyaOpeZ87IiqqxiGMolSZIkSXEpLz9g5Iz5FLe8u2Bs5Iz55OVX3wXghnJJkiRJUlyas3D5ZjPkGwuArOwc5ixcXnVFVTBDuSRJkiQpLi1dVXIgL8918chQLkmSJEmKS+mppWuyXNrr4pGhXJIkSZIUl7q0bUxmWgolHXwWI+zC3qVt46osq0IZyiVJkiRJcSkxIcaIPh0BNgvmBd+P6NOxWp9XbiiXJEmSJMWtXp0ymdy/MxlpRZeoZ6SlMLl/57g8p7ws6kRdgCRJkiRJW9KrUyY9O2YwZ+Fylq7KIT01XLJenWfICxjKVWqxWIznn3+eE044IepSJEmSJNUyiQkxurZrEnUZFc7l69VMLBbb4tfAgQMr7bGzsrLo3bt3pd1/gY1/nwYNGrDLLrswcOBAPv744zLfV/fu3bnqqqsqvkhJkiRJqgCG8gqQlx8we8Ey/vbJD8xesIy8/KDSHisrK6vw6/bbb6dhw4ZFxiZOnFjk+nXr1lXYY2dkZJCcnFxh97clU6ZMISsri88++4y7776b3377jQMOOIBHH320Sh5fkiRJkqqCoXwbzZyXxSHj3uD0+9/nyic/4fT73+eQcW8wc15WpTxeRkZG4VdaWhqxWKzw+5ycHBo1asTTTz9N9+7dSUlJYerUqSxbtozTTz+dFi1aUL9+ffbYYw+eeOKJIvfbvXt3rrjiCoYMGULjxo3JyMjgxhtvLHJNLBZj+vTpACxatIhYLMa0adPo0aMH9evXZ6+99mL27NlFbnP//ffTsmVL6tevz4knnsitt95Ko0aNtvp7NmrUiIyMDNq0acNRRx3Fs88+y5lnnslll13Gr7/+CrDV32vgwIG8+eabTJw4sXDmfdGiReTl5XHeeefRtm1b6tWrR/v27Tf7MEOSJEmSqoKhfBvMnJfFoKlzycrOKTK+JDuHQVPnVlow35rrr7+eK664gs8//5yjjz6anJwc9t13X1544QXmzZvHhRdeyFlnncUHH3xQ5HaPPPIIDRo04IMPPmD8+PH8+c9/5tVXX93iYw0fPpzBgwfzySefsOuuu3L66aezfv16AN59910uvvhirrzySj755BN69uzJqFGjyv17XX311axataqwpq39XhMnTqRr165ccMEFhSsJWrZsSX5+Pi1atODpp59m/vz5/OlPf2LYsGE8/fTT5a5NkiRJksrDRm/llJcfMHLGfIpbqB4Qnpk3csZ8enbMqPKOgFdddRX9+vUrMjZ48ODC/7788suZOXMmzzzzDAcccEDh+J577smIESMA2GWXXbjrrrt4/fXX6dmzZ4mPNXjwYI499lgARo4cye67787XX3/Nbrvtxp133knv3r0LH3vXXXflvffe44UXXijX77XbbrsB4Sw9wI477rjF3ystLY26detSv359MjIyCq9LTExk5MiRhd+3bduW9957j6effppTTjmlXLVJkiRJUnk4U15OcxYu32yGfGMBkJWdw5yFy6uuqP/Zb7/9inyfl5fHqFGj2HPPPWnSpAnbbbcdr7zyCt9++22R6/bcc88i32dmZrJ06dItPtbGt8nMDM8HLLjNl19+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bK5VU61mF+8NyvNcuHRciiNBAC++GC5L7949DOSJiXD22eHy9WefNZBLkhSHDOWq9dw/uIHPhVQN5eXBM89A585w7LHw3nuQnBx2UP/qq7CjeocOUVcpSZJKEAuCoEaf9bRy5UrS0tLIzs6mYcOGUZejOJaXH7gU+398LqRqYO1aeOwxGDsW/vvfcGy77cIwfvXVkOmHaJIkRaUsOdQ95dL/uH9wA58LKY6tWQMPPgg33wzffhuObb89XHklXH45NK75PTAkSapJDOWSJFUHK1fCpElw222wdGk4lpEB114LF10EqanR1idJksrFUC5JUjz75ReYOBHuvBOys8OxNm1gyBA45xxIqflHNkqSVJOVq9HbW2+9xfr16zcbX79+PW+99dY2FyVJUq33ww9wzTXQujXcdFMYyDt0gEcfDfeQDxpkIJckqQYo10x5jx49yMrKIj09vch4dnY2PXr0IC8vr0KKkySp1lmwAMaPh4cfDpu5QdhZfdgwOPFESPDgFEmSapJyhfIgCIjFNu/EvGzZMho0aLDNRUmSVOvMmwdjxsCTT0J+fjh26KEwfDgcdRQU8/93JUlS9VemUN6vXz8AYrEYAwcOJDk5ufBneXl5/Oc//+Gggw6q2AolSarJ5syB0aPhb3/bMNa7NwwdGoZySZJUo5UplKelpQHhTHlqair16tUr/FndunU58MADueCCCyq2QkmSapoggFmzwjD+2mvhWCwGJ50UhvHOnSMtT5IkVZ0yhfIpU6YA0KZNGwYPHuxSdUmSyiII4B//gFGj4P33w7HEROjfH264AXbbLdr6JElSlYsFQRBEXURlWrlyJWlpaWRnZ9OwYcOoy5Ek1UZ5efDss+HM+H/+E44lJ8N558F114VHnEmSpBqjLDm01DPlnTt35vXXX2f77bdnn332KbbRW4G5c+eWvlpJkmqqtWth6lQYOxa++ioc2247uOQSuPpqyMiItj5JkhS5Uofyvn37FjZ269u37xZDuSRJtdrvv8ODD8LNN8N334VjjRvDlVfCZZeF/y1JkkQZQvn2229Pwv/ORj333HNp0aJF4feSJAnIzoZJk+C22+Dnn8OxzEy49lq46KJwllySJGkjpd5TXqdOHX788UfS09NJTEwkKyuL9PT0yq5vm7mnXJJU6X7+GSZOhLvuCoM5QNu2cP31MGAApKREW58kSapS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D8a692Csew/GuvdgrHsPxrr3sPNYJ/1GbwAAAAAA2BUz5QAAAAAAWIRQDgAAAACARQjlAAAAAABYhFAOAAAAAIBFCOU9bOnSpXI4HAH/3G532GO2bt2q8ePHy+l06vTTT9fTTz8dp96iK0477bQOY+1wOHTzzTcHbV9WVha0/T/+8Y849xyRvPHGG5o9e7Zyc3PlcDj00ksvBTxvjNHSpUuVm5urfv366YILLtD7778f8bxr165Vfn6+0tPTlZ+fr/Xr1/fQT4BohRvr5uZm3XfffRozZowGDBig3Nxcff/739dnn30W9pzPP/980Gu9qamph38ahBPpul6wYEGHMZs0aVLE83Jd20+ksQ52fTocDj388MMhz8l1bU8PPPCAzjnnHGVkZCgnJ0eXXXaZ9u/fH9CG9+zkEGmsE+09m1AeB9/85jfl9Xr9//bu3RuybXV1tb797W/r/PPPV0VFhX7605/qtttu09q1a+PYY3TGzp07A8Z506ZNkqTvfe97YY/bv39/wHFnnnlmPLqLGBw9elRjx47Vk08+GfT5hx56SI899piefPJJ7dy5U263W9OnT1djY2PIc27fvl1z587VvHnz9O6772revHm66qqr9Pbbb/fUj4EohBvrY8eOaffu3fr5z3+u3bt3a926dTpw4IAuvfTSiOfNzMwMuM69Xq+cTmdP/AiIUqTrWpKKiooCxuyVV14Je06ua3uKNNbtr83nnntODodDV155Zdjzcl3bz9atW3XzzTdrx44d2rRpk7766ivNmDFDR48e9bfhPTs5RBrrhHvPNuhRxcXFZuzYsVG3v/fee82oUaMCHvvRj35kJk2a1M09Q0+7/fbbzYgRI0xra2vQ57ds2WIkmSNHjsS3Y+gSSWb9+vX+71tbW43b7TbLly/3P9bU1GRcLpd5+umnQ57nqquuMkVFRQGPzZw501x99dXd3md0TvuxDqa8vNxIMp988knINqtWrTIul6t7O4duFWys58+fb+bMmRPTebiu7S+a63rOnDnmoosuCtuG6zox1NbWGklm69atxhjes5NZ+7EOxs7v2cyUx8EHH3yg3Nxc5eXl6eqrr9ZHH30Usu327ds1Y8aMgMdmzpypXbt2qbm5uae7im5y4sQJrVmzRjfccIMcDkfYtmeffbY8Ho8uvvhibdmyJU49RHeprq5WTU1NwHWbnp6u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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 86
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于梯度方程式函数也在每个训练迭代中输出一个代价的向量，所以我们也可以绘制。 请注意，代价总是降低 - 这是凸优化问题的一个例子。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.938515Z",
     "start_time": "2024-08-05T08:13:20.844919Z"
    }
   },
   "source": [
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.plot(np.arange(iters), cost, 'r')\n",
    "ax.set_xlabel('Iterations')\n",
    "ax.set_ylabel('Cost')\n",
    "ax.set_title('Error vs. Training Epoch')\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 87
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多变量线性回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "练习1还包括一个房屋价格数据集，其中有2个变量（房子的大小，卧室的数量）和目标（房子的价格）。 我们使用我们已经应用的技术来分析数据集。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:20.963766Z",
     "start_time": "2024-08-05T08:13:20.956836Z"
    }
   },
   "source": [
    "path =  'ex1data2.txt'\n",
    "data2 = pd.read_csv(path, header=None, names=['Size', 'Bedrooms', 'Price'])\n",
    "data2.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Size  Bedrooms   Price\n",
       "0  2104         3  399900\n",
       "1  1600         3  329900\n",
       "2  2400         3  369000\n",
       "3  1416         2  232000\n",
       "4  3000         4  539900"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Size</th>\n",
       "      <th>Bedrooms</th>\n",
       "      <th>Price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2104</td>\n",
       "      <td>3</td>\n",
       "      <td>399900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1600</td>\n",
       "      <td>3</td>\n",
       "      <td>329900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2400</td>\n",
       "      <td>3</td>\n",
       "      <td>369000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1416</td>\n",
       "      <td>2</td>\n",
       "      <td>232000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3000</td>\n",
       "      <td>4</td>\n",
       "      <td>539900</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 88
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于此任务，我们添加了另一个预处理步骤 - 特征归一化。 这个对于pandas来说很简单"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:21.005128Z",
     "start_time": "2024-08-05T08:13:20.998450Z"
    }
   },
   "source": [
    "data2 = (data2 - data2.mean()) / data2.std()\n",
    "data2.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "       Size  Bedrooms     Price\n",
       "0  0.130010 -0.223675  0.475747\n",
       "1 -0.504190 -0.223675 -0.084074\n",
       "2  0.502476 -0.223675  0.228626\n",
       "3 -0.735723 -1.537767 -0.867025\n",
       "4  1.257476  1.090417  1.595389"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Size</th>\n",
       "      <th>Bedrooms</th>\n",
       "      <th>Price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.130010</td>\n",
       "      <td>-0.223675</td>\n",
       "      <td>0.475747</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.504190</td>\n",
       "      <td>-0.223675</td>\n",
       "      <td>-0.084074</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.502476</td>\n",
       "      <td>-0.223675</td>\n",
       "      <td>0.228626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.735723</td>\n",
       "      <td>-1.537767</td>\n",
       "      <td>-0.867025</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.257476</td>\n",
       "      <td>1.090417</td>\n",
       "      <td>1.595389</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 89
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在我们重复第1部分的预处理步骤，并对新数据集运行线性回归程序。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:21.081273Z",
     "start_time": "2024-08-05T08:13:21.075404Z"
    }
   },
   "source": [
    "# add ones column\n",
    "data2.insert(0, 'Ones', 1)\n",
    "\n",
    "# set X (training data) and y (target variable)\n",
    "cols = data2.shape[1]\n",
    "X2 = data2.iloc[:,0:cols-1]\n",
    "y2 = data2.iloc[:,cols-1:cols]\n",
    "\n",
    "# convert to matrices and initialize theta\n",
    "X2 = np.matrix(X2.values)\n",
    "y2 = np.matrix(y2.values)\n",
    "theta2 = np.matrix(np.array([0,0,0]))\n",
    "\n",
    "computeCost(X2, y2, theta2)\n"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.48936170212765967"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 90
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:21.181408Z",
     "start_time": "2024-08-05T08:13:21.122441Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# perform linear regression on the data set\n",
    "g2, cost2 = gradientDescent(X2, y2, theta2, alpha, iters)\n",
    "\n",
    "# get the cost (error) of the model\n",
    "computeCost(X2, y2, g2)"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.13070336960771892"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 91
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们也可以快速查看这一个的训练进程。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "scrolled": true,
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:21.288364Z",
     "start_time": "2024-08-05T08:13:21.194961Z"
    }
   },
   "source": [
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.plot(np.arange(iters), cost2, 'r')\n",
    "ax.set_xlabel('Iterations')\n",
    "ax.set_ylabel('Cost')\n",
    "ax.set_title('Error vs. Training Epoch')\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/IAAAK7CAYAAABRQrQoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABgYUlEQVR4nO3deXwV1f3/8ffNHpBc9gQkhrAH2SRsCUXciIBYqW2NC4tLq/gVS8RWRagCViO2IgUBpQtxhdiKShWQqMgiiBgTXEBFBYOQyJ6ELYFkfn/MLxcuCZB97sx9PR+Peczcc+fO/Uych/q+58wZl2EYhgAAAAAAgC0EWF0AAAAAAACoPII8AAAAAAA2QpAHAAAAAMBGCPIAAAAAANgIQR4AAAAAABshyAMAAAAAYCMEeQAAAAAAbIQgDwAAAACAjRDkAQAAAACwEYI8AMBR0tLS5HK5zrp8+OGHVpfoE871N6rNv9fUqVPlcrmq9dkPP/zQsn9mZd99tiUtLa3eazqTy+XS+PHjrS4DAGCBIKsLAACgLixcuFBdunQp1961a1cLqvE9GzZs8Hr92GOPadWqVfrggw+82mv69/rd736noUOHVuuzvXv31oYNGyz9Z/bEE0/o8ssvL9fevn17C6oBAMBEkAcAOFK3bt3Up0+fKn3GMAwdP35c4eHh5d47duyYwsLCqt27LElHjx5VgwYNqv352jRgwACv1y1atFBAQEC59jNV9RzatGmjNm3aVKvGiIiI89ZT1zp27Gh5DQAAnImh9QAAv1U2NPm5555TXFycQkND9cILL3iG569cuVK33367WrRooQYNGqioqEilpaV66qmn1KVLF4WGhqply5YaM2aMfvrpJ69jX3bZZerWrZvWrFmjxMRENWjQQLfffnuFdcyaNUsul0vfffddufcefPBBhYSEaN++fZKkrKwsjRgxQi1btlRoaKhat26ta665ptz314ZznUN6erqSkpLUqlUrhYeHKy4uTg899JCOHDnidYyKhta3bdtWI0aM0IoVK9S7d2+Fh4erS5cu+ve//+21X0VD62+99VZdcMEF+u677zR8+HBdcMEFio6O1v3336+ioiKvz//000/6zW9+o0aNGqlx48a65ZZbtGnTplofGl92Pm+88YZ69OihsLAwtWvXTrNnzy63b05OjkaNGuX55xcXF6enn35apaWlXvsVFRVp+vTpiouLU1hYmJo1a6bLL79c69evL3fMl156SXFxcWrQoIF69uypt99+u9bODQDgm+iRBwA4UklJiU6ePOnV5nK5FBgY6NX25ptvau3atXrkkUcUFRWlli1batOmTZKk22+/Xddcc41eeuklHTlyRMHBwbr77ru1YMECjR8/XiNGjNCOHTv05z//WR9++KE+++wzNW/e3HPs3NxcjRo1Sg888ICeeOIJBQRU/Pv5qFGj9OCDDyotLU1/+ctfvM7h5Zdf1rXXXqvmzZvryJEjGjJkiGJjYzV37lxFRkYqLy9Pq1atUmFhYW396byc7Ry2bdum4cOHKyUlRQ0bNtTXX3+tGTNm6JNPPik3PL8imzdv1v3336+HHnpIkZGR+uc//6k77rhDHTp00KWXXnrOz544cUK//OUvdccdd+j+++/XmjVr9Nhjj8ntduuRRx6RJB05ckSXX365Dhw4oBkzZqhDhw5asWKFkpOTq3T+paWl5a4jSQoK8v5fqOzsbKWkpGjq1KmKiorSK6+8ogkTJqi4uFh//OMfJUl79+5VYmKiiouL9dhjj6lt27Z6++239cc//lHff/+95s2bJ0k6efKkhg0bprVr1yolJUVXXHGFTp48qY8//lg5OTlKTEz0fO8777yjTZs2afr06brgggv01FNP6Ve/+pW++eYbtWvXrkrnCgCwEQMAAAdZuHChIanCJTAw0GtfSYbb7TYOHDhQ4THGjBnj1b5161ZDkvF///d/Xu0bN240JBkPP/ywp23w4MGGJOP999+vVN3XX3+90aZNG6OkpMTTtmzZMkOS8b///c8wDMP49NNPDUnGm2++WaljVsXYsWONhg0berVV9hxKS0uNEydOGKtXrzYkGZs3b/a89+ijjxpn/u9GTEyMERYWZvz444+etmPHjhlNmzY17rrrLk/bqlWrDEnGqlWrvOqUZLz22mtexxw+fLjRuXNnz+u5c+cakozly5d77XfXXXcZkoyFCxee85zKvvtsy86dO73Ox+VyGdnZ2V7HGDJkiBEREWEcOXLEMAzDeOihhwxJxsaNG732u/vuuw2Xy2V88803hmEYxosvvmhIMv7xj3+cs0ZJRmRkpFFQUOBpy8vLMwICAozU1NRzfhYAYG8MrQcAONKLL76oTZs2eS0bN24st98VV1yhJk2aVHiMX//6116vV61aJckc3n26fv36KS4uTu+//75Xe5MmTXTFFVdUqt7bbrtNP/30k9577z1P28KFCxUVFaVhw4ZJkjp06KAmTZrowQcf1HPPPactW7ZU6tg1cbZz+OGHH3TzzTcrKipKgYGBCg4O1uDBgyVJW7duPe9xe/XqpYsuusjzOiwsTJ06ddKPP/543s+6XC5de+21Xm09evTw+uzq1avVqFGjchPt3XTTTec9/ulmzJhR7jratGmTIiMjvfa7+OKL1bNnT6+2m2++WQUFBfrss88kSR988IG6du2qfv36ee136623yjAMz0iG5cuXKyws7Ky3Ypzu8ssvV6NGjTyvIyMj1bJly0r9HQEA9sXQegCAI8XFxVVqsrtWrVpV+r39+/ef9TOtW7cuF57OdewzDRs2TK1atdLChQuVlJSkgwcPaunSpZowYYLndgC3263Vq1fr8ccf18MPP6yDBw+qVatW+v3vf68pU6YoODi40t9XWRWdw+HDhzVo0CCFhYXpL3/5izp16qQGDRpo586duv7663Xs2LHzHrdZs2bl2kJDQyv12QYNGigsLKzcZ48fP+55vX///nJhW1KFbefSrl27Sl1HUVFRZ20ru27279+vtm3bltuvdevWXvvt3btXrVu3PuutGKeryd8RAGBfBHkAgF871yz0Z75XFppyc3PLzcS+e/dur/vjz3fsMwUGBmr06NGaPXu2Dh06pFdffVVFRUW67bbbvPbr3r27Fi9eLMMw9PnnnystLU3Tp09XeHi4HnrooUp/X2VVdA4ffPCBdu/erQ8//NDTCy9Jhw4dqvXvr65mzZrpk08+Kdeel5dXJ99X0XHL2squm2bNmik3N7fcfrt375Ykz/XTokULrVu3TqWlpZUK8wAA/8N/HQAAqKSyIeYvv/yyV/umTZu0detWXXnllTU6/m233abjx49r0aJFSktLU0JCgrp06VLhvi6XSz179tQzzzyjxo0be4Zv14eycB8aGurV/vzzz9dbDeczePBgFRYWavny5V7tixcvrpPv++qrr7R582avtldffVWNGjVS7969JUlXXnmltmzZUu6f1YsvviiXy+V5Xv2wYcN0/PjxWp1ZHwDgLPTIAwAc6csvv6xwtvH27durRYsW1Tpm586ddeedd2rOnDkKCAjQsGHDPLPWR0dH67777qtRzV26dFFCQoJSU1O1c+dOLViw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lJQUvfHGG1q8eLHWrVunw4cPa8SIESopKbHitOBQmzZt0oIFC9SjRw+vdq5RWO3gwYMaOHCggoODtXz5cm3ZskVPP/20Gjdu7NmH6xRWmjFjhp577jk9++yz2rp1q5566in99a9/1Zw5czz7cI2ivh05ckQ9e/bUs88+W+H7tXVN3nzzzcrOztaKFSu0YsUKZWdna/To0XV+flViwJb69etnjBs3zqutS5cuxkMPPWRRRfBXe/bsMSQZq1evNgzDMEpLS42oqCjjySef9Oxz/Phxw+12G88995xhGIZx6NAhIzg42Fi8eLFnn127dhkBAQHGihUr6vcE4FiFhYVGx44djYyMDGPw4MHGhAkTDMPgGoVvePDBB41f/OIXZ32f6xRWu+aaa4zbb7/dq+366683Ro0aZRgG1yisJ8l44403PK9r65rcsmWLIcn4+OOPPfts2LDBkGR8/fXXdXxWlUePvA0VFxcrMzNTSUlJXu1JSUlav369RVXBX+Xn50uSmjZtKknavn278vLyvK7P0NBQDR482HN9ZmZm6sSJE177tG7dWt26deMaRq255557dM011+iqq67yaucahS9YunSp+vTpo9/+9rdq2bKlLrnkEv3jH//wvM91Cqv94he/0Pvvv69vv/1WkrR582atW7dOw4cPl8Q1Ct9TW9fkhg0b5Ha71b9/f88+AwYMkNvt9qnrNsjqAlB1+/btU0lJiSIjI73aIyMjlZeXZ1FV8EeGYWjixIn6xS9+oW7dukmS5xqs6Pr88ccfPfuEhISoSZMm5fbhGkZtWLx4sT777DNt2rSp3Htco/AFP/zwg+bPn6+JEyfq4Ycf1ieffKI//OEPCg0N1ZgxY7hOYbkHH3xQ+fn56tKliwIDA1VSUqLHH39cN910kyT+XQrfU1vXZF5enlq2bFnu+C1btvSp65Ygb2Mul8vrtWEY5dqAujR+/Hh9/vnnWrduXbn3qnN9cg2jNuzcuVMTJkzQypUrFRYWdtb9uEZhpdLSUvXp00dPPPGEJOmSSy7RV199pfnz52vMmDGe/bhOYZX09HS9/PLLevXVV3XxxRcrOztbKSkpat26tcaOHevZj2sUvqY2rsmK9ve165ah9TbUvHlzBQYGlvtFaM+ePeV+gQLqyr333qulS5dq1apVatOmjac9KipKks55fUZFRam4uFgHDx486z5A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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 92
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们也可以使用scikit-learn的线性回归函数，而不是从头开始实现这些算法。 我们将scikit-learn的线性回归算法应用于第1部分的数据，并看看它的表现。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-05T08:13:21.317505Z",
     "start_time": "2024-08-05T08:13:21.304565Z"
    }
   },
   "source": [
    "from sklearn import linear_model\n",
    "model = linear_model.LinearRegression()\n",
    "model.fit(X, y)"
   ],
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'sklearn'",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mModuleNotFoundError\u001B[0m                       Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[93], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m \u001B[38;5;21;01msklearn\u001B[39;00m \u001B[38;5;28;01mimport\u001B[39;00m linear_model\n\u001B[0;32m      2\u001B[0m model \u001B[38;5;241m=\u001B[39m linear_model\u001B[38;5;241m.\u001B[39mLinearRegression()\n\u001B[0;32m      3\u001B[0m model\u001B[38;5;241m.\u001B[39mfit(X, y)\n",
      "\u001B[1;31mModuleNotFoundError\u001B[0m: No module named 'sklearn'"
     ]
    }
   ],
   "execution_count": 93
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "scikit-learn model的预测表现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\ndNttt6XdJ9Pj/LbDDjts/bqmpkabN28uew0AAACVgG2/fTZr1iw9+uijeu655yRJb7/9tp555hlN\nnTpVa9as0fPPPy9Jw0J2yrHHHqvrrrtOkjQwMKA333xT48eP14YNGzLe/6ijjtItt9wiSXrmmWf0\n4osvqrGxsdQvCwAAoKoRon02ceJE3XjjjTr77LN18MEHb23lGDt2rK6//nqdeOKJmjlzpnbfffeM\nj7/22mv14IMPavr06Tr00EO1atUq7brrrpo9e7amTZumtra2tPv/y7/8i7Zs2aLp06frrLPO0o03\n3pg2Aw0AAIDRM+dc0DXk1dzc7Do7O9PGnn76aR1wwAEBVYRM+J4AAICoM7PlzrnmfPdjJhoAAAAo\nkp+rcwAAAAA5tXfFtaijR719CdXXxdTW0qjWpoagy8qLEA0AAIBAtHfFNW9JtxL9A5KkeF9C85Z0\nS1LogzTtHAAAAAjEoo6erQE6JdE/oEUdPQFVVDhCNAAAAALR25coajxMCNEAAAAIRH1drKjxMCFE\nj9D69es1Y8YMzZgxQ3vuuacaGhq2/nnTpk2jOvadd96pRYsWlaTOc889V1OmTNEhhxyi/fffX+ed\nd556e3vzPm7x4sV69913S1IDAABAJm0tjYrV1qSNxWpr1NYS/o3iuLBwhHbdddetW3fPnz9f48aN\n0yWXXJJ2H+ecnHMaM6a49yqnnXZayeqUpGuuuUatra3asmWLFi9erGOOOUbd3d2qra3N+pjFixfr\nn/7pnzR27NiS1gIAAJCSungwiqtzVM1MdHtXXLMXLtOUufdo9sJlau+K+/I8zz33nA488ECdc845\nOuigg7R27VpdcMEFam5u1kEHHaRvf/vbW++79957a/78+WpqatLBBx+sZ555RpL04x//WBdddJEk\nbyb5a1/7mj74wQ/qfe97n+68805J3hbgX/ziFzV16lQdf/zxOuGEE9Te3p6ztjFjxuiSSy7RLrvs\novvvv1+SMtZ2zTXX6NVXX9VRRx2lj370o1nvBwAAMFqtTQ16dO4x+tvCE/Xo3GMiEaClKgnRqeVT\n4n0JOW1bPsWvIL169WpdfPHFWrVqlRoaGrRw4UJ1dnbqiSee0NKlS7Vq1aqt991jjz3U1dWlz3/+\n81q8eHHG47366qt69NFH1d7ernnz5kmSbr/9dsXjca1atUo33nij/vjHPxZc38yZM7V69WpJyljb\nxRdfrN13310PP/ywfvvb32a9HwAAQLWqihBd7uVT3v/+96u5edtukbfddptmzpypmTNn6umnn04L\noHPmzJEkHXrooVqzZk3G47W2tsrMdPDBByse94L/I488ojPPPFNjxoxRfX29jj766ILrG7zVe67a\nBiv0fgAAANWgKnqiy718yo477rj162effVbXXnut/vznP6uurk7nnntu2gV7O+ywgySppqZGmzdv\nzni81H2k9AA8UitWrNCJJ56Yt7ZCXwMAAEC1qYqZ6CCXT3nrrbc0fvx47bTTTlq7dq06OjpKctzZ\ns2frjjvukHNOa9eu1UMPPZT3Mc45XXPNNVq/fr2OO+64nLWNHz9eGzZs8PU1AAAARFVVzES3tTSm\nbSkplW/5lJkzZ+rAAw/U1KlTNWnSJM2ePbskxz3zzDO1bNkyHXDAAZo0aZKampo0YcKEjPe9+OKL\n9a1vfUuJREJHHHGEli1bptra2py1XXDBBfroRz+qffbZR0uXLvXlNQAAAESVlaI9wG/Nzc2us7Mz\nbezpp5/WAQccUPAx2rvikVw+JZeNGzdq3LhxWrdunQ4//HA99thjmjhxYmD1FPs9AQAACBszW+6c\na853v6qYiZa85VOiHpqH+tjHPqa33npL/f39uuKKKwIN0AAAANWkakJ0JXr44YeDLgEAAKAqVcWF\nhQAAAEApRTpER6Gfu1rwvQAAANUksiF67NixWr9+PeEtBJxzWr9+vcaOHRt0KQAAAGUR2Z7ovffe\nWy+//LLWrVsXdCmQ96Zm7733DroMAACAsohsiK6trdWUKVOCLgMAAABVKLLtHAAAAEBQIjsTDQAA\nqlslbqSG6CBEAwCAyGnvimvekm4l+gckSfG+hOYt6ZYkgjTKgnYOAAAQOYs6erYG6JRE/4AWdfQE\nVBFG5e23pb6+oKsoCiEaAABETm9foqhxhNT69dLkydK4cdLOOwddTVEI0QAAIHLq62JFjSNk1q2T\nGhqk3XaTXnjBG7vuumBrKhIhGgAARE5bS6NitTVpY7HaGrW1NAZUEQryyivSHntIu+8u9fZ6Y1de\nKTknffGLwdZWJC4sBAAAkZO6eJDVOSJi7VrpwAPT+56vukq69NLgaholQjQAAIik1qYGQnPYxePS\n1KnSxo3bxhYvli6+OLiaSoQQDQAAgNJ68UVpv/2kTZu2jX33u9KFFwZXU4kRogEAAFAaa9ZI73+/\ntGXLtrHrrotcv3MhCNEAAAAYnb/+1QvPg/3oR9LnPx9MPWVAiAYAAMDIPPustP/+6WM33iidd14g\n5ZQTIRoAAADF6enxLhgc7Oc/l845J5h6AkCIBgAAKKP2rnh0l+ZbtUo66KD0sf/5H+mss4KpJ0CE\naAAAgDJp74pr3pJuJfoHJEnxvoTmLemWpHAH6e5u6eCD08fuuEP6xCeCqScE2LEQAACgTBZ19GwN\n0CmJ/gEt6ugJqKI8VqyQzNIDdHu7t8NgFQdoiZloAACAsuntSxQ1Hpjly6Xm5vSx3/xGOumkYOoJ\nIWaiAQAAyqS+LlbUeNn9+c/ezPPgAH3ffd7MMwE6DSEaAACgTNpaGhWrrUkbi9XWqK2lMaCKkh59\n1AvPhx++bez++73wfMIJwdUVYoRoAACAMmltatCCOdPVUBeTSWqoi2nBnOnBXVS4YIEXno88ctvY\nsmVeeD7uuGBqigh6ogEAAMqotakh+JU45s+Xrrgifezuu6UTTwyknChiJhoAAKBazJvnzTwPDtBX\nX+3NPBOgi8JMNAAAQKX7+tela65JH/ve96SvfCWYeioAIRoAAKBSffnL0ve/nz72wx9KF1wQTD0V\nhBANAAAQEN+2AD//fOknP0kf++lPpc9+dvTHhiRCNAAAQCB82QL8nHOkW29NH7vlFulTnxpNqciA\nCwsBAAACUNItwE8/3btgcHCAvv1274JBArQvmIkGAAAIQEm2AD/pJOmee9LH2tulU08dRWUoBDPR\nAAAAARjVFuAf/ag38zw4QN97rzfzTIAuC0I0AABAAEa0Bfjs2V54fuCBbWNLl3rh+WMf86lSZEI7\nBwAAQABSFw8WtDrHoYdKjz+ePva730lHH+1/ociIEA0AABCQvFuAH3CAtHp1+tijj0of/KC/hSEv\nQjQAAEDYTJ4svfBC+thjj0mHHRZIORiOEA0AABAWu+8urVuXPvb441JTUzD1ICtCNAAAQNDGj5c2\nbkwfe/JJafr0YOpBXoRoAACAoJgNH1u5UjrwwPLXgqIQogEAAMrJOWlMhlWGe3qk/fcvfz0YEdaJ\nBgAAKAfnvJnnoQG6s9O7jQAdKb6FaDPbx8weNLNVZrbSzL6WHN/FzJaa2bPJ/+/sVw0AAACB27Il\nc3h++GEvPB96aDB1YVT8nIneLOn/OOcOlDRL0pfN7EBJcyU94JzbT9IDyT8DAABUloEBLzzXpO9K\nqMce88LzkUcGUxdKwrcQ7Zxb65x7PPn1BklPS2qQdKqkm5J3u0lSq181AAAAlF1/vxeetxty6dmK\nFV54Zq3nilCWnmgzmyypSdJjkvZwzq1N3vR3SXtkecwFZtZpZp3rhq6XCAAAEDb/+IcXnrffPn18\n5UovPB9ySDB1wRe+h2gzGyfpV5Iucs69Nfg255yT5DI9zjl3vXOu2TnXPHHiRL/LBAAAGJlEwgvP\nY8emjz/7rBeeWa6uIvkaos2sVl6AvsU5tyQ5/IqZ7ZW8fS9Jr/pZAwAAgC82bvTC83vekz6+Zo0X\nnvfdN5CyUB5+rs5hkm6Q9LRzbvGgm+6SdF7y6/Mk/dqvGgAAAEruzTe98Dx+fPp4PO6F50mTgqkL\nZeXnZiuzJX1aUreZrUiOfUPSQkm/NLPzJb0g6UwfawAAACiN9eul3XYbPv7KK9Luu5e/HgTKtxDt\nnHtEUoa9LCVJx/r1vAAAACX1yivSnnsOH1+/Xtpll/LXg1Bg228AAIBM4nFp772Hj/f1SRMmlL8e\nhArbfgMAAAy2Zo3X8zw0QG/Y4PU8E6AhQjQAAIDn2We98DxlSvr4O+944XncuGDqQigRogEAQHVb\nudILz/vvnz7+7rteeI7FgqkLoUaIBgAA1WnFCi88T5uWPr5pkxeed9ghmLoQCYRoAABQXR57zAvP\nTU3p45s3e+G5tjaYuhAphGgAAFAdHn7YC8+zZqWPDwx44bmmJpi6EEmEaAAAUNmWLvXC84c+lD6+\nZYsXnscQh1A8/tYAAIDKdM89Xng+/vj08VR4tmx7wgH5EaIBAEBlueMOLyCfdFL6uHOEZ5QMIRoA\nAFSGW27xAvIZZ6SPp8IzUEKEaAAAEG033OCF53PPTR8nPMNH2wVdAAAAwIh85jPSz342fJzgjDIg\nRAMAgGhpbZV+/evh44RnlBEhGgAARMMxx0gPPjh8nPCMABCiAQBAuB16qPT448PHCc8IECEaAACE\n0777Ss8/P3yc8IwQIEQDAIBw2XVX6fXXh48TnhEihGgAABAO220nDQwMHyc8I4QI0QAAIFjZdhAk\nPCPECNEAACAYhGdEGCEaAACUF+EZFYAQDQAAyoPwHErtXXEt6uhRb19C9XUxtbU0qrWpIeiyQo8Q\nDQAA/EV4Dq32rrjmLelWot+7oDPel9C8Jd2SRJDOY0zQBQAAgAplljlAO0eADolFHT1bA3RKon9A\nizp6AqooOpiJBgAApcXMc2T09iWKGsc2hOiIon8JABA6hOfIqa+LKZ4hMNfXxQKoJlpo54igVP9S\nvC8hp239S+1d8aBLAwBUI9o2IqutpVGx2pq0sVhtjdpaGgOqKDoI0RFE/xIAIBQIz5HX2tSgBXOm\nq6EuJpPUUBfTgjnT+XS7ALRzRBD9SwCAQNG2UVFamxoIzSPATHQEZetTon8JAOArZp6BrQjREUT/\nEgCgrDKF57FjCc+oarRzRFDqIxdW5wAA+CrTrPNee0m9veWvBQgZQnRE0b8EAPBNpvA8dar09NPl\nrwUIKUI0AADwZArPs2ZJf/xj+WspAHsmIEiEaAAAql2m8Hz88VJHR/lrKVBqz4TUkq+pPRMkEaRR\nFlxYCABAtcp0weDpp3sXC4Y4QEvsmYDgEaIBAKg2mcLzP/2TF55vvz2YmorEngkIGiEaAIBqkSk8\nf/WrXni+4YZgahoh9kxA0AjRAABUukzh+fLLvfB87bXB1DRK7JmAoHFhIQAAlSrTBYMLFkhz55a/\nlhJjzwQEjRANAEAlcU4ak+GD5muv9Vo3Kgh7JiBIhGgAACrBli1STc3w8Rtu8C4aBFBShGgAAKJs\nYEDaLsOv89tukz75yfLXA1QJQjQAAFHU3y9tv/3w8V//WjrllPLXA1QZQjQAAFHy7rtSLMMybvff\nLx13XPnrAaoUIRoAgCh4+21p3Ljh4w8/LB15ZPnrAaocIRoAgDB76y1pwoTh43/+s/SBD5S/HgCS\nCNEAAITT+vXSbrsNH3/ySWn69PLXAyANIRoAgDB55RVpzz2Hj/f0SPvvX/56AGREiAYAIAxeekl6\n73uHj//tb9LkyWUvB0BuhGgAAIL0/PPSvvsOH4/Hpfr68tcDoCAZ9gUFAAC+W7VKMhseoF991du6\nmwANhBohGgCAcurq8sLzQQelj7/+uheeJ04Mpi4ARSFEAwBQDn/8oxeeZ85MH3/rLS8877xzMHUB\nGBFCNAAAfnrwQS88f/CD6ePvvOOF5/Hjg6kLwKgQogEA8MO993rh+Zhj0sf/8Q8vPGfauhtAZLA6\nBwAgq/auuBZ19Ki3L6H6upjaWhrV2tQQdFnh9qtfSaefPny8v1/ajl+7QKXgXzMAIKP2rrjmLelW\non9AkhTvS2jekm5JIkhncvPN0nnnDR8fGJDG8MEvUGn4Vw0AyGhRR8/WAJ2S6B/Qoo6egCoKqR/8\nwGvbGBqgt2zx2jYI0EBF4l82ACCj3r5EUeNV5+qrvfD8pS+lj6fCs1kwdQEoC0I0ACCj+rrMF75l\nG68aV1yRC2L9AAAgAElEQVThBeS2tvRx5wjPQBUhRAMAMmpraVSstiZtLFZbo7aWxoAqCtill3oB\nef789PFUeAZQVXwL0Wb2EzN71cyeGjQ238ziZrYi+d/H/Xp+AMDotDY1aMGc6Wqoi8kkNdTFtGDO\n9Oq7qPBLX/LC86JF6eOEZ6Cq+bk6x42S/kvSzUPGr3HOXe3j8wIASqS1qaH6QnPKuedKt9wyfJzg\nDEA+hmjn3ENmNtmv4wMA4ItTT5Xuumv4OOEZwCBB9ERfaGZPJts9dg7g+QEAGO7oo722jaEBmrYN\nABmUO0RfJ+l9kmZIWivpO9nuaGYXmFmnmXWuW7euXPUBAKpNU5MXnh96KH2c8Awgh7KGaOfcK865\nAefcFkk/knRYjvte75xrds41T5w4sXxFAgCqw+TJXnhesSJ9nPAMoABl3fbbzPZyzq1N/vE0SU/l\nuj8AVKP2rrgWdfSoty+h+rqY2loaq/fiPj/U1Ulvvjl8nOAMoAi+hWgzu03ShyXtZmYvS/qWpA+b\n2QxJTtIaSf/s1/MDQBS1d8U1b0n31u22430JzVvSLUkE6dHKtgkK4RnACPi5OsfZGYZv8Ov5AKAS\nLOro2RqgUxL9A1rU0UOIHinCMwAflLWdAwCQW29foqhx5EB4BuAjtv0GgBCpr4sVNY4MzDIHaC4Y\nBFBChGgACJG2lkbFamvSxmK1NWpraQyoogghPAMoI9o5ACBEUn3PrM5RBNo2AASAEA0AIdPa1EBo\nLgThGUCACNEAgGghPAMIAUI0ACAaCM8AQoQQDQAIN8IzgBAiRAMAwonwDCDECNEAgHAhPAOIAEI0\nACAcCM8AIoTNVgAAwcq0Scp73sMmKQBCjZloIKm9K84GF0A5ZZp5PvJI6eGHy18LABSJEA3IC9Dz\nlnQr0T8gSYr3JTRvSbckEaSBUssUnk8+WbrrrvLXAgAjRDsHIG+L5VSATkn0D2hRR09AFaGStHfF\nNXvhMk2Ze49mL1ym9q540CUFI1PbxjnneC0bBGgAEcNMNCCpty9R1DhQKD7lUOaZ5wsukH74w/LX\nAgAlwkw0IKm+LlbUOFCoqv6UI9PM89e/7s08E6ABRBwhGpDU1tKoWG1N2listkZtLY0BVYRKUZWf\ncmQKz9/8pheev/OdYGoCgBKjnQPQto/VWZ0DpVZfF1M8Q2CuyE85MrVtXHWVdOml5a8FAHxGiAaS\nWpsaCM0oubaWxrSeaKkCP+XIFJ6/9z3pK18pfy0AUCaEaADwUcV+yuGcNCZDR+CPfyydf3756wGA\nMiNEA4DPKupTjmzh+dZbpbPPLn89ABAQQjQAIL8tW6SamuHjS5ZIp51W/noAIGCEaABAdgMD0nYZ\nflXcd590wgnlrwcAQoIQDQAYrr9f2n774eMPPih9+MNlLwcAwoZ1ogEA27z7rrfaxtAAvXSp1w9N\ngAYAScxEAwAk6e23pXHjho8/8og0e3b56wGAkCNEA0A1e/NNqa5u+Phf/iI1N5e/HgCICEI0AFSj\n9eul3XYbPt7dLU2bVv56ACBiCNEAUE3+/ndpr72Gj/f0SPvvX/56ACCiCNEAUA1efFGaNGn4+Jo1\nmccBADkRogGgkj33nLTffsPH43Gpvr789QBAhWCJOwCoRCtXekvVDQ3Qr77qLVVHgAaAUSFEA0Al\nefxxLzwPvTjwjTe88DxxYjB1AUCFoZ0DKLP2rrgWdfSoty+h+rqY2loa1drUEHRZiLo//CHzes4b\nNmRe/xkAMCqEaKCM2rvimrekW4n+AUlSvC+heUu6JYkgjZFZtkw69tjh4++8I8Vi5a9nhHhzCSBq\nCNHAEH7+Ml/U0bM1QKck+ge0qKOHwIDi3HOPdNJJw8f/8Y/hW3aHHG8uAUQRPdHAIKlf5vG+hJy2\n/TJv74qX5Pi9fYmixoFhbrjB63keGqD7+72e54gFaCn3m0sACCtmojEiUf/oNVv9fs8U19fFFM8Q\nmOvrovOxOwJy7bXSRRcNHx8YkMZEez6EN5cAoijaP3kRCL9na/2Wq36/f5m3tTQqVluTNharrVFb\nS2NJjo8K9O//7s08Dw3QW7Z4M88RD9BS9jeRvLkEEGbR/+mLsov6R6+56vf7l3lrU4MWzJmuhrqY\nTFJDXUwL5kyP1Cw+ymTuXC88X355+ngqPJsFU5cPeHMJIIpo50DRov7Ra676rzlrRtoFTlLpf5m3\nNjUQmpHdl78sff/7w8edK38tZZL69xDlFjEA1YcQjaJFva83V/38MkdgPv1p6ec/Hz5eweF5MN5c\nAogaQjSK1tbS6PtsrZ/y1c8vc5TVKadIv/nN8PEqCc8AEFWEaBQt6rO1Ua8fFeLoo6WHHho+TngG\ngEgwF4Ef2M3Nza6zszPoMgBg9A4+WOruHj4egZ/FAFANzGy5c6453/0KWp3DzGYXMgYAyMLM+29o\ngHaOAA0AEVToEnffK3AMADBYKjwPRXgGgEjL2RNtZkdI+qCkiWb29UE37SSpJvOjAABZ13EmOANA\nRch3YeH2ksYl7zd+0Phbkk73qygAiCzCMwBUhZwh2jn3e0m/N7MbnXMvlKkmAIgewjMAVJV87Rz/\n6Zy7SNJ/mdmw3wTOuVN8qwwAooDwDABVKV87x83J/1/tdyEAECmEZwCoavlC9CJJx0r6uHPusjLU\nAwDhRngGACh/iN7LzD4o6RQz+x9Jab89nHOP+1YZAIQJ4RkAMEi+EP2vkr4paW9Ji4fc5iQd40dR\nABAahGcAQAb5Vue4Q9IdZvZN59y/lakmAAge4RkAkEO+mWhJknPu38zsFEkfSg79zjl3t39lAUBA\nCM8AgAIUtO23mS2Q9DVJq5L/fc3M/p+fhQFAWbE9NwCgCAXNREs6UdIM59wWSTKzmyR1SfqGX4UB\nQFkw8wwAGIGCZqKT6gZ9PaHUhQBAWTHzDAAYhUJnohdI6jKzB+Utc/chSXN9qwoA/MLMMwCgBPKG\naDMzSY9ImiXpA8nhy5xzf/ezMAAoKcIzAKCE8oZo55wzs3udc9Ml3VWGmgCgdEIQntu74lrU0aPe\nvoTq62Jqa2lUa1ND2Z4fAFB6hfZEP25mH8h/t23M7Cdm9qqZPTVobBczW2pmzyb/v3NR1QJAoULS\n89zeFde8Jd2K9yXkJMX7Epq3pFvtXfGy1QAAKL1CQ/Thkv5kZs+b2ZNm1m1mT+Z5zI2SThgyNlfS\nA865/SQ9IPqqAZRaSMJzyqKOHiX6B9LGEv0DWtTRU/ZaAAClU+iFhS3FHtg595CZTR4yfKqkDye/\nvknS7yRdVuyxAWCYELRtZNLblyhqHAAQDTlDtJmNlfRFSftK6pZ0g3Nu8yiebw/n3Nrk13+XtMco\njgUAmcPzTjtJb75Z/loyqK+LKZ4hMNfXxQKoBgBQKvnaOW6S1CwvQH9M0ndK9cTOOScp6xSRmV1g\nZp1m1rlu3bpSPS2ASpGrbSMkAVqS2loaFautSRuL1daoraUxoIoAAKWQr53jwOSqHDKzGyT9eZTP\n94qZ7eWcW2tme0l6NdsdnXPXS7pekpqbm1mDCoAnpG0b2aRW4WB1DgCoLPlCdH/qC+fcZsv2y6tw\nd0k6T9LC5P9/PdoDAqgSmX7+TJwovZr1vXhotDY1EJoBoMLkC9GHmNlbya9NUiz5Z5PXkbFTtgea\n2W3yLiLczcxelvQteeH5l2Z2vqQXJJ05yvoBVLpM4fnAA6WVK8tfCwAASTlDtHOuJtfteR57dpab\njh3pMQFUCeekMRku2TjySOnhh8tfDwAAQxS6TjQA+M85b+Z5aIA+9VTvNgI0ACAkCNEAgjcwkDk8\nf/azXnhubw+kLAAAsiFEAwjOpk1eeN5uSGfZ17/uheef/jSYugAAyIMQDaD83nnHC8877JA+fsUV\nXnj+TsmWpAcAwBeFbvsNAKP31lvShAnDx6+9VvrqV8tfDwAAI0SILpP2rjibLaB6vfaat6bzUD/9\nqdf3DABAxBCiy6C9K655S7qV6B+QJMX7Epq3pFuSCNKobK+8Iu255/Dx22+XTj+9/PVUCN6UA0Dw\n6Ikug0UdPVsDdEqif0CLOnoCqgjw2Ysvej3PQwP0ffd5Pc8E6BFLvSmP9yXktO1NeXtXPOjSAKCq\nEKLLoLcvUdQ4EFnPPOOF50mT0scfe8wLzyecEExdFYQ35QAQDoToMqivixU1DkTOE0944bmxMX38\nySe98HzYYcHUVYF4Uw4A4UCILoO2lkbFatN3UI/V1qitpTHLI4CIeOwxLzzPmJE+/swzXniePj2Y\nuioYb8oBIBwI0WXQ2tSgBXOmq6EuJpPUUBfTgjnTuRAI0bVsmReeZ81KH3/hBS8877dfMHVVAd6U\nA0A4sDpHmbQ2NRCaEX2/+Y10yinDx//+d2mPPcpfTxVK/RxhdQ4ACBYhGkB+t90mfepTw8dff13a\neefy11PleFMOAMGjnQNAdtdf77VtDA3QGzZ4bRsEaABAlSJEAxju6qu98PzP/5w+nkh44XncuGDq\nAgAgJAjRALb513/1wnNbW/r4pk1eeB47Npi6AAAIGXqiAUhf+5r03e8OH9+8WaqpGT4OAECVI0QD\n1ezYY73l6obassWbkQYAABkRooFq1NjobYgylHPlrwUAgAgiRAPVZLfdpPXrh48TngEAKAohGqgG\n2VozKig8t3fF2YAEAFA2hGigklVBeJa8AD1vSbcS/QOSpHhfQvOWdEsSQRoA4AuWuAMqkVnmAO1c\nxQVoydsCOxWgUxL9A1rU0RNQRQCASsdMNFBJiph5rqT2h96+RFHjAACMFjPRQCUocuY51f4Q70vI\naVv7Q3tX3P9afVBfFytqHACA0SJEA1E2wraNSmt/aGtpVKw2fVOYWG2N2loaA6oIAFDpaOcAomiU\nFwxWWvtDqg2lUtpTAADhR4gGoiRLeJ694AEvNBZ4mPq6mOIZAnOU2x9amxoIzQCAsiFEA1GQJTxP\nvuxu74sil3Rra2lMWxJOov0BAIBiEKKBMMsx8zx0JjnV01xIiKb9AQCA0SFEA2GUp+e5d+49GW8u\npqeZ9gcAAEaOEI2qFcp1kgu8YLASe5oBAIgSlrgLqfauuGYvXKYpc+/R7IXLIrt+b1iFbp3kIpeq\nY0k3AACCRYgOodAFvAoUmnWSR7jOc2tTgxbMma6GuphMUkNdTAvmTA9+Jh0AgCpBO0cI5Qp4hKTS\nCHyd5FGu8yxFo6c5lC0zAACUADPRIRR4wKsCgW0TPcKZ5yjiExUAQCUjRIdQYAGvipS9p7iKwnNK\naFpmAADwASE6hNpaGlVbkx64amuMi8ZKqGw9xVUYnlP4RAUAUMnoiQ6rofmqgvNWUH2zvvYUZ+l5\nnnLZ3d5r7IqHpjfYr/PPMnwAgEpGiA6hRR096t+Snpr7t7iKvLAw1Teb+tg/nmP76khcpJYlPB9w\n+X0FvUa/DT2HH5k6Ub9aHvelNrYWBwBUMto5QqiaPgYvtG829Bep5WjbmL3ggVD0Bmc6h7f86UXf\namMZPgBAJWMmOoT8/Bg8bLO5hb5hGOmyf76/3gKWqgvLm6JM5zBbl1CpaovCMnwAAIwEM9Eh5NfK\nEWGczS10JZKRBFFfX28RFwyGZbWVYoIxfcsAAORGiA4hvz4GD+OSY4W+YRhJEPXl9Y5gtY2wbNGd\n7VwNfTX0LQMAkB/tHCHlx8fgYWkrGCz1GvO1XIzkIrWSvt5R7DBY6Gv0W7Zz+IlDG/Tg6nWhafEB\nACAKCNFVJKxLjhXyhmEkQbQkr7cE23NL4egNDkuYBwCgEhCiq0jUlxwrNoiO6vWWKDyHTRjCPAAA\nlYAQXUWqbSZyRK+3QsMzAAAoLXMRCAfNzc2us7Mz6DJQyQjPAABAkpktd84157sfM9FVLGxrRgeC\n8AwAAEaAEF2litluu+I4J43Jsroj4RkAABSAdaKrVBjXjPbdwIA385wpQOdY5xkAAGAoQnSVCuOa\n0b7ZtMkLz9tl+OCF8AwAAEaAEF2lwrIVta82bvTC8w47DLtp9oIH1P74ywEUBQAAKgE90QWoxAvw\nor5mdE6vvSZNnDhseP17JujQC2/x/lBNPeAAAKDkCNF5VOoFeBW5ZvQLL0iTJw8f339/zf7cdcN2\nL0z1gEf6NQMAgEAQovPIdQFe1MNXxexet3KlNG3a8PFjj5V++1tJUu/cezI+tCJ7wAEAgO8I0XlE\n+QK8SmxDSfPYY9KsWcPHP/EJ6Y470obq62LDZqJT4wAAAMUiROcR1fBVrjaUQIL60qXS8ccPH7/w\nQum73834kKj0gFf8Gx8fce4AAOVEiM4jKuFrqHzrQJcibJS9X/znP5c+/enh41deKf3f/5vzoVHo\nAa/U/vty4NwBAMrNXATWyG1ubnadnZ2BPX8UZ7gmZ+kBlrw3AUPfFCyYM73o1zR74bKMs/QNdTE9\nOveYoo6V07XXShddNHz8Jz+RPve50j1PwMp2PisQ5w4AUCpmttw515zvfsxEFyCKF+CZZd9DpFQX\nSvreL/6Nb0gLFgwfb2+XTj21NM8xQn68sYpy/33QOHcAgHIjRBcoSrPR7V3xojfhG0nY8K1f/Pzz\nvVnmoZYtkz7ykdEduwT8ah2Iav99GHDuAADlFsiOhWa2xsy6zWyFmQXXp1GgVGiK9yXktC00tXfF\ngy4to1TfcyY1ZhnHRxI22loaFautSRsbVb/4YYd5U+hDA/Ty5d60eggCtJS/33ykSn4+qwjnDgBQ\nbkFu+/0R59yMQnpOguZXaPJLrlnlsw/fp2Rho7WpQQvmTFdDXUwmr/90JL3V2m47Lzz/5S9pw0vb\nH/LC88yZRdfmJ79aB0p2PqsQ5w4AUG60cxQgav2W2T7a3vk9tbqydbqaJ+1SstaUUfWLZ5kVP+JL\nP9XanSYq1vm2Frw3Hrog5GfrQBT778OCcwcAKKegQrST9FszG5D0Q+fc9QHVUZCo9VtmW5bvWycf\nJMn/sJG3fzxLeJ7x1VvVF9tp65/DujNkVJc9BAAApRNUO8eRzrkZkj4m6ctm9qGhdzCzC8ys08w6\n161bV/4KB4lav2WQH23n7B83yxygN2zQlMvuTgvQKWGc7ad1AAAABL5OtJnNl7TROXd1tvsEvU60\nFK3VOYKUab3eNVedlPnOmzZJtbVZHyexzi8AACiv0K4TbWY7ShrjnNuQ/Pp4Sd8udx3Fot+yMINn\njrOG54EBaUz6hyC0SAAAgCgJoid6D0l3mvex/naSbnXO/W8AdQSqUme26+tienTesZlvzPGpR7Hb\nclfq+QMAANEQeDtHIcLQzlFKQzfrkEa+9XaoZLlg8IDL7yvpa6vY8wcAAAJXaDtHkOtEV62orTud\nV5YLBqdcdrdmL3ig5OG24s4fAACIHNaJDkDU1p3OKsvMc6pt4285HjqadoyKOX8AACCyCNEBiNq6\n08PkCc+5tHfFdcVvVuqNd/q3jqWWwUvJF64jf/4AAEDkEaLLYOis60emTtSvlsejtxLFKMKzlLmX\nOSXRP6D5d63UPzZv2Xr74HA9OEj7tZIHFysCAIBC0RPts0ybj/xqeVyfOLQhOpt1ZNskxbmCA7SU\nuZd5sL5Ef0G9zn5sdpJzkxgAAIAhmIn2WbaL4B5cvS78m4iMcuZ5qJH2LGd6XLZ1u0c6m5zrYsXQ\nvrkBAACBIUT7LJIXwZU4PKeCba5Hx2prNLZ2TFqvdEqhvc5D20WytYNkEsnvEwAACAztHD7LFgBD\neRFcido2BhvcJpFNXaxWC+ZM17dOPkix2pq024rpdR7N0ndBfJ/au+KavXCZpsy9R7MXLqN1BACA\nCGEm2meR2M46z8zzaC64y9UH3ZA8Vup+vX0JTYjVamztGPW901/Wpe/K/X0azaw5AAAIHiG6AKMJ\nkcVuZ11WBbRtjDbsZQuwJunRuccMO35fol+x2hpdc9aMos/RaJa+K/f3iR5sAACijRCdRylmDLNd\nBBeYInqeRxv28gXbUobJ0c4ml/P7RA82AADRRk90HhW1xfQIep5HG/baWhpz9jmXMkz6sfSdXyLV\nKw8AAIZhJjqPipgxHMVqG6PdHTBfm0Spdx8M3ax/FpHolQcAAFkRovOI9BbTWcLz5MvuVqy2Rgu6\n4nkDZynCXq5gW61hMtS98gAAIC9CdB4jCXmBbx+dIzynFNp37HfYq+YwGZVZcwAAMJy5Ea7/W07N\nzc2us7MzsOcvJhQPvRBR8kL34N5c30J2lvA85bK7M250YpL+tvDE0T8vAABAhTCz5c655nz3Yya6\nAMXMGOZbbcKX9YHz9DzXL1xW9paUwGfjAQAAfMTqHCWW70LEbCH7ol+sKH7XugJX28i3QkapDd6l\n0GnbGwV25AMAAJWCEF1i+ZYuy7WqR8Fhs8il6sq99FtFLQsIAACQAe0cJZbvQsRsq32kJPoHNP+u\nlZkDbpa2jfbHX/ZaJ+bek7V1go1EAAAASoeZ6BLLNevb3hXX2//YnPcYfYn+9NnoHDPP7Y+/HLrW\nCTYSAQAAlY6ZaB9kmvXNtGpHLos6etQ6c+/MNw5q2SjlttmlUq1rPwMAgOpBiC6TTGE3mzVXnZT5\nhgz9zmFsnajmtZ8BAEB1IESXSSGhtpjwnBLWHRXZSAQAAFQyQnQBSrHmcbawu/N7atX1rZbMDypg\nIxxaJwAAAMqPCwvzKNWax5nWal5z1UkZA3T74y8XFKCl8i9fBwAAALb9zmt2lt3+GupienTuMUUd\nKzWj/ei8YzPfIQLfCwAAgErGtt8lUsoL91pn7q3WTDcQngEAACKFdo48SrLmcZE7DAIAACDcmInO\nY1QX7mXZYTBbcC7FBYylOAYAAAByI0TnUfSax85JY7JM8OeYdR66GUvqAsbBNeRTimMAAAAgP0J0\nAQpa83jLFqmmZvj4hAlSX1/e5yjFzoNh3L0QAACgEtETPVoDA17bxtAAffzx3sxzAQFaKs0FjGHc\nvRAAAKASEaJHqr/fC8/bDZnMb2vzwnNHR1GHK8UFjCW5CBIAAAB5EaKLtWmTF5633z59/NprvfD8\nH/8xosNm2oyl2J0HS3EMAAAA5EdPdKE2b5Zqa4eP//KX0hlnjPrwRV/A6NMxAAAAkB87Fhait1dq\nSA+ip517tVZPPmjrFtssLQcAABB97FhYSq+/vvXLo/75x3qpbk/vD8mVLySxtBwAAEAVIUQXYto0\nTbnsbmWas+/tS4xqabmhM9gfmTpRD65ep96+hOreUyvnpDcT/cxuAwAAhAghukD1dTHFMywVl21c\nUtbxlEybo/z8Ty9uvf2Nd/rTjsXsNgAAQDiwOkeBcq18UZNle+9s4ymZZrBzSQxqHwEAAEBwCNEF\nam1q0II509VQF5NJaqiLbb2ocCDLxZnZxlNGsgkKG6cAAAAEj3aOImTb/rshS0tHQ55NTnK1guR6\nDAAAAILFTHQJjHSTk0yPy4WNUwAAAMKBmegSGOkmJ5keV6rVOVi3GgAAwD9stlKBhq76IXmz2Kke\nbgAAAGTGZisVqNDZ5dGsWw0AAID8CNERkWlN6WzrRmdbwYOVPQAAAEqDCwsjItfs8lDZVvBgZQ8A\nAIDSIERHRDGzyyNdLWSk2rvimr1wmabMvUezFy5Te1fcl+cBAAAIC9o5yqC9K64rfrNy6zbedbFa\nzT/loKL6k3NtOz7USFcLGYli2kwAAAAqBSHaZ+1dcbXd8YT6B7atgtKX6Ffb7U9IKjxotrU0qu32\nJ9S/ZdtxasdY1tnlbBvDlBoXMQIAgGpEO4fPFnX0pAXolP4tLmM/c06W588B4CJGAABQjQjRPssV\nJosJmpnCeP/ACIJ4iXERIwAAqEaEaJ/lCpNjzAq+GC+sM77lvogRAAAgDAjRPmtraVRtTea+iwHn\n5LTtYrxcQXokM77lWDWjtalBC+ZMV0NdTCapoS7GzogAAKDicWGhj1I7DPYPOI0xKXVNoEka2iWd\n72K8tpbGjFt5Z5vxLeeqGeW6iBEAACAsmIkuUqGzu5e3d+viX6zYuizdFueF3v88a0bWY+dqzSh2\nxreYzVkAAABQHGaii1Do7G57V1y3/OnFrLPN2dZ8dpJmL1yWdU3nYmZ8w9pDDQAAUAmYiS5CobO7\nizp6hgXolN6+RMaL8VIK6Y8uBKtmAAAA+IcQXYRCZ3dzzfbW18XSWjMyKUXbRb5VM9iqGwAAYOQI\n0UUodHY32/1M2hpiW5sa9OjcY7LulzLatotcPdSptpR4X6Lg1UEAAACwDSG6CNnaMN7ZtDktgGa6\nn0k6Z9Z7h/U0+9l2kQrqf1t4oh6de8zW5+aiQwAAgNEhRBchNbtbF6tNG3/jnf60mdxMs8DnzHqv\nHly9blj7RBCblVTrRYe0sAAAgFIJJESb2Qlm1mNmz5nZ3CBqGKnWpgbtuMPwRU2GzuQOngVua2nU\nr5bHM7ZPBLFZSTVedEgLCwAAKKWyL3FnZjWS/lvScZJelvQXM7vLObeq3LWMVLEzubnaJ1LL1pVz\ns5JiN26pBPm+BwAAAMUIYib6MEnPOef+6pzbJOl/JJ0aQB0jVuxMbtjaJ6pxq+6wfQ8AAEC0BbHZ\nSoOklwb9+WVJhwdQx4gVO5ObbXOVINsnqm2r7jB+DwAAQHSF9sJCM7vAzDrNrHPdunVBl5Om2Jnc\nIC4eRDq+BwAAoJSCmImOS9pn0J/3To6lcc5dL+l6SWpubs62AWBgipnJHby0XG9fQvV1saxbe8Mf\nfA8AAEApmXPlzadmtp2kZyQdKy88/0XSp5xzK7M9prm52XV2dpapQgAAAFQrM1vunGvOd7+yz0Q7\n5zab2VckdUiqkfSTXAEaAAAACJsg2jnknLtX0r1BPDcAAAAwWqG9sBAAAAAIK0I0AAAAUCRCNAAA\nAFCkQHqiK0F7V5zl0gAAAKoUIXoE2rviaTsWxvsSmrekW5II0gAAAFWAdo4RWNTRk7bltyQl+ge0\nqKMnoIoAAABQToToEejtSxQ1DgAAgMpCiB6B+rpYUeMAAACoLIToEWhraVSstiZtLFZbo7aWxoAq\nApV3TTkAAAojSURBVAAAQDlxYeEIpC4eXNTRo3hfQjVmaT3RXFwIAABQ2ZiJHqHWpoatM9IDzkna\ntkpHe1c84OoAAADgJ0L0KLBKBwAAQHWinWMUwr5KBxvCAAAA+IOZ6FEI8yodqQ1h4n0JOdFqAgAA\nUEqE6FEI8yodtJoAAAD4h3aOURi8SkfYWibC3moCAAAQZYToUWptaghFaB6qvi6meIbAHIZWEwAA\ngKijnaNChbnVBAAAIOqYia5QYW41AQAAiDpCdAULa6sJAABA1NHOAQAAABSJEA0AAAAUiRANAAAA\nFIkQDQAAABSJEA0AAAAUiRANAAAAFIkQDQAAABSJEA0AAAAUiRANAAAAFIkQDQAAABSJEA0AAAAU\nabugCwi79q64FnX0qLcvofq6mNpaGtXa1BB0WQAAAAgQITqH9q645i3pVqJ/QJIU70to3pJuSSJI\nAwAAVDHaOXJY1NGzNUCnJPoHtKijJ6CKAAAAEAaE6Bx6+xJFjQMAAKA6EKJzqK+LFTUOAACA6kCI\nzqGtpVGx2pq0sVhtjdpaGgOqCAAAAGHAhYU5pC4eZHUOAAAADEaIzqO1qYHQDAAAgDS0cwAAAABF\nIkQDAAAARSJEAwAAAEUiRAMAAABFIkQDAAAARSJEAwAAAEUiRAMAAABFIkQDAAAARSJEAwAAAEUi\nRAMAAABFIkQDAAAARSJEAwAAAEUiRAMAAABFIkQDAAAARSJEAwAAAEUiRAMAAABFIkQDAAAARTLn\nXNA15GVm6yS9EGAJu0l6LcDnr3ScX39xfv3F+fUP59ZfnF9/cX795ef5neScm5jvTpEI0UEzs07n\nXHPQdVQqzq+/OL/+4vz6h3PrL86vvzi//grD+aWdAwAAACgSIRoAAAAoEiG6MNcHXUCF4/z6i/Pr\nL86vfzi3/uL8+ovz66/Azy890QAAAECRmIkGAAAAikSIHsTM1phZt5mtMLPODLebmX3XzJ4zsyfN\nbGYQdUaRmTUmz2vqv7fM7KIh9/mwmb056D7/GlS9UWBmPzGzV83sqUFju5jZUjN7Nvn/nbM89gQz\n60n+XZ5bvqqjI8v5XWRmq5P//u80s7osj835s6TaZTm3880sPujf/8ezPJa/u3lkOb+/GHRu15jZ\niiyP5e9uDma2j5k9aGarzGylmX0tOc7P3hLIcX5D+bOXdo5BzGyNpGbnXMZ1B5M/1C+U9HFJh0u6\n1jl3ePkqrAxmViMpLulw59wLg8Y/LOkS59xJQdUWJWb2IUkbJd3snJuWHPsPSa875xYmf0Dv7Jy7\nbMjjaiQ9I+k4SS9L+ouks51zq8r6AkIuy/k9XtIy59xmM7tKkoae3+T91ijHz5Jql+Xczpe00Tl3\ndY7H8Xe3AJnO75DbvyPpTefctzPctkb83c3KzPaStJdz7nEzGy9puaRWSZ8VP3tHLcf53Vsh/NnL\nTHRxTpX3Q8k55/4kqS75DUdxjpX0/OAAjeI55x6S9PqQ4VMl3ZT8+iZ5P3yGOkzSc865v/7/9u4o\nxI6rjuP49wepaKPEaiFqa4lFEamUDZUaQyN5EDFFi1GQqthURQlWIYrWhz4YfROxIlUb0EqtBivR\nRKO0VCK0RKGpTZomkVRrIdiGmKKIabVYE/8+zFm9ve7N7rib3ZvN9wPDnTlz5u7Zw9n//vfMmbtV\n9SxwZ7tOA6bq36r6eVWdbIf30wV29TRi7M6EY3cGTte/SQK8B/j+vDZqkaiqY1W1r+0/BRwGLsLY\nOydG9e+4xl6T6OcqYFeSvUk+OsX5i4DHB46faGXq51pGB/DV7XbN3Ukum89GLRLLq+pY2/8jsHyK\nOo7jufEh4O4R56aLJZraJ9rP/7dH3A537M7eGuB4VT064rxjd4aSrABWAnsw9s65of4dNDax1yT6\nua6qqglgHXBDuyWmOZTkecA1wLYpTu8DLqmqy4FbgB/PZ9sWm+rWarle6wxIchNwEtg6ooqxpL9b\ngUuBCeAY8OWFbc6i9V5OPwvt2J2BJC8EfgRsqqoTg+eMvbM3qn/HLfaaRA+oqqPt9UlgB92tl0FH\ngVcOHF/cyjRz64B9VXV8+ERVnaiqp9v+XcB5SS6c7wae5Y5PLjFqr09OUcdxPAtJrgfeDry/RjxU\nMoNYoiFVdbyqTlXVv4BvMnWfOXZnIckS4F3AD0bVcexOL8l5dAne1qra3oqNvXNkRP+OZew1iW6S\nLG2L2EmyFHgrcGio2k7gunRW0T2YcQz1MXIWJMnL2no9klxJNz7/PI9tWwx2Ahva/gbgJ1PU+TXw\nmiSvancGrm3XaRpJ3gbcCFxTVX8fUWcmsURDhp4vWc/UfebYnZ23AI9U1RNTnXTsTq/9jroNOFxV\nNw+cMvbOgVH9O7axt6rcuj9oLgUebttvgJta+UZgY9sP8HXgMeAg3ROgC972s2UDltIlxcsGygb7\n9+Ot7x+me3Bg9UK3eZw3uj9GjgH/pFtb92HgpcAvgEeBXcBLWt1XAHcNXHs13VPij02OdbcZ9e/v\n6dY07m/bluH+HRVL3Kbt2++2uHqALrF4+XDftmPH7v/Rv6389sl4O1DXsduvb6+iW6pxYCAOXG3s\nPeP9O5ax14+4kyRJknpyOYckSZLUk0m0JEmS1JNJtCRJktSTSbQkSZLUk0m0JEmS1JNJtCTNsySn\nkuxPcijJtiTnz/H7X5/ka9PUWZtk9cDxxiTXzWU7JGkxM4mWpPn3TFVNVNXrgWfpPi99vq0F/pNE\nV9WWqrpjAdohSWclk2hJWli7gVcDJPlUm50+lGRTK1uR5JEkW5McTvLDyZnrJEeSXNj235Dk3uE3\nT/KOJHuSPJRkV5LlSVbQJe6fbDPia5JsTvLpds1EkvuTHEiyI8kFrfzeJF9M8kCS3yVZc+a7R5LG\nk0m0JC2QJEuAdcDBJFcAHwTeCKwCPpJkZav6WuAbVfU64ATwsR5f5pfAqqpaCdwJ3FhVR4AtwFfa\njPjuoWvuAD5bVZfT/RfBzw2cW1JVVwKbhsol6ZxiEi1J8+8FSfYDDwJ/AG6j+3e3O6rqb1X1NLAd\nmJzpfbyqftX2v9fqztTFwD1JDgKfAS47XeUky4AXV9V9reg7wJsHqmxvr3uBFT3aIUmLypKFboAk\nnYOeqaqJwYIkp6tfI45P8t/JkOePuPYW4Oaq2plkLbC5V0v/1z/a6yn8HSLpHOZMtCSNh93AO5Oc\nn2QpsL6VAVyS5E1t/310SzQAjgBXtP13j3jfZcDRtr9hoPwp4EXDlavqr8BfBtY7fwC4b7ieJJ3r\nTKIlaQxU1T7gduABYA/wrap6qJ3+LXBDksPABcCtrfzzwFeTPEg3MzyVzcC2JHuBPw2U/xRYP/lg\n4dA1G4AvJTkATABfmM33JkmLUaqG7xJKksZF+ySNn7WPw5MkjQlnoiVJkqSenImWJEmSenImWpIk\nSerJJFqSJEnqySRakiRJ6skkWpIkSerJJFqSJEnqySRakiRJ6unf8KCUlWjHoSQAAAAASUVORK5C\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc1277b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.array(X[:, 1].A1)\n",
    "f = model.predict(X).flatten()\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.plot(x, f, 'r', label='Prediction')\n",
    "ax.scatter(data.Population, data.Profit, label='Traning Data')\n",
    "ax.legend(loc=2)\n",
    "ax.set_xlabel('Population')\n",
    "ax.set_ylabel('Profit')\n",
    "ax.set_title('Predicted Profit vs. Population Size')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. normal equation（正规方程）\n",
    "正规方程是通过求解下面的方程来找出使得代价函数最小的参数的：$\\frac{\\partial }{\\partial {{\\theta }_{j}}}J\\left( {{\\theta }_{j}} \\right)=0$ 。\n",
    " 假设我们的训练集特征矩阵为 X（包含了${{x}_{0}}=1$）并且我们的训练集结果为向量 y，则利用正规方程解出向量 $\\theta ={{\\left( {{X}^{T}}X \\right)}^{-1}}{{X}^{T}}y$ 。\n",
    "上标T代表矩阵转置，上标-1 代表矩阵的逆。设矩阵$A={{X}^{T}}X$，则：${{\\left( {{X}^{T}}X \\right)}^{-1}}={{A}^{-1}}$\n",
    "\n",
    "梯度下降与正规方程的比较：\n",
    "\n",
    "梯度下降：需要选择学习率α，需要多次迭代，当特征数量n大时也能较好适用，适用于各种类型的模型\t\n",
    "\n",
    "正规方程：不需要选择学习率α，一次计算得出，需要计算${{\\left( {{X}^{T}}X \\right)}^{-1}}$，如果特征数量n较大则运算代价大，因为矩阵逆的计算时间复杂度为$O(n3)$，通常来说当$n$小于10000 时还是可以接受的，只适用于线性模型，不适合逻辑回归模型等其他模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 正规方程\n",
    "def normalEqn(X, y):\n",
    "    theta = np.linalg.inv(X.T@X)@X.T@y#X.T@X等价于X.T.dot(X)\n",
    "    return theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[-3.89578088],\n",
       "        [ 1.19303364]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "final_theta2=normalEqn(X, y)#感觉和批量梯度下降的theta的值有点差距\n",
    "final_theta2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#梯度下降得到的结果是matrix([[-3.24140214,  1.1272942 ]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在练习2中，我们将看看分类问题的逻辑回归。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
